RepositoryCreator.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace Dcat\Admin\Scaffold;
  3. use Dcat\Admin\Support\Helper;
  4. class RepositoryCreator
  5. {
  6. /**
  7. * @param string $modelClass
  8. * @param string $repositoryClass
  9. *
  10. * @return string
  11. */
  12. public function create(?string $modelClass, ?string $repositoryClass)
  13. {
  14. $model = class_basename($modelClass);
  15. $files = app('files');
  16. $path = Helper::guessClassFileName($repositoryClass);
  17. $dir = dirname($path);
  18. if (! is_dir($dir)) {
  19. $files->makeDirectory($dir, 0755, true);
  20. }
  21. if (is_file($path)) {
  22. return;
  23. }
  24. $content = $files->get($this->stub());
  25. $files->put($path, str_replace([
  26. '{namespace}',
  27. '{class}',
  28. '{model}',
  29. ], [
  30. $this->getNamespace($repositoryClass),
  31. class_basename($repositoryClass),
  32. $modelClass,
  33. ], $content));
  34. $files->chmod($path, 0777);
  35. return $path;
  36. }
  37. protected function getNamespace($name)
  38. {
  39. return trim(implode('\\', array_slice(explode('\\', $name), 0, -1)), '\\');
  40. }
  41. protected function stub()
  42. {
  43. return __DIR__.'/stubs/repository.stub';
  44. }
  45. }