123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- <?php
- declare(strict_types=1);
- namespace Modules\Develop\Support\Generate\Create;
- use Catch\CatchAdmin;
- use Illuminate\Support\Facades\File;
- use Illuminate\Support\Str;
- /**
- * Route
- */
- class Route extends Creator
- {
- /**
- * @param string $controller
- */
- public function __construct(public readonly string $controller)
- {
- }
- /**
- * get file
- *
- * @return string
- */
- public function getFile(): string
- {
- return CatchAdmin::getModuleRoutePath($this->module);
- }
- /**
- * get content
- *
- * @return string
- */
- public function getContent(): string
- {
- // route 主要添加两个点
- // use Controller
- // 添加路由
- $route = Str::of('');
- $originContent = File::get(CatchAdmin::getModuleRoutePath($this->module));
- // 如果已经有 controller,就不再追加路由
- if (Str::of($originContent)->contains($this->getUserController())) {
- return $originContent;
- }
- File::lines(CatchAdmin::getModuleRoutePath($this->module))
- ->each(function ($line) use (&$route) {
- if (Str::of($line)->contains('Route::prefix')) {
- $route = $route->trim(PHP_EOL)
- ->newLine()
- ->append($this->getUserController())
- ->append(';')
- ->newLine(2)
- ->append($line)
- ->newLine();
- } else {
- $route = $route->append($line)->newLine();
- }
- });
- $apiResource = "Route::apiResource('{api}', {controller}::class);";
- return Str::of($route->toString())->replace(
- ['{module}', '//next'],
- [
- lcfirst($this->module),
- Str::of($apiResource)->replace(['{api}', '{controller}'], [$this->getApiString(), $this->getControllerName()])
- ->prepend("\t")
- ->prepend(PHP_EOL)
- ->newLine()->append("\t//next")]
- )->toString();
- }
- /**
- * get api
- *
- * @return string
- */
- public function getApiString(): string
- {
- return Str::of($this->getControllerName())->remove('Controller')->snake('_')->replace('_', '/')->toString();
- }
- /**
- * get api route
- *
- * @return string
- */
- public function getApiRute(): string
- {
- return lcfirst($this->module).'/'.$this->getApiString();
- }
- /**
- * use controller
- *
- * @return string
- */
- protected function getUserController(): string
- {
- return 'use '.CatchAdmin::getModuleControllerNamespace($this->module).$this->getControllerName();
- }
- /**
- * get controller name
- *
- * @return string
- */
- protected function getControllerName(): string
- {
- return Str::of($this->controller)->whenContains('Controller', function ($value) {
- return Str::of($value)->ucfirst();
- }, function ($value) {
- return Str::of($value)->append('Controller')->ucfirst();
- })->toString();
- }
- }
|