124 lines
3.1 KiB
PHP
Raw Normal View History

2022-12-05 23:01:12 +08:00
<?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();
}
}