File manager - Edit - /var/www/html/portal/app/Console/Commands/MakeResource.php
Back
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\File; class MakeResource extends Command { protected $signature = 'make:resource {name} {--model=} {--permission=}'; protected $description = 'Gera Controller, Request, Service, Model e Http Resource em estrutura de subpastas (obrigatorio: --model= e opcional: --permission=PERMISSAO)'; public function handle() { $name = $this->argument('name'); $model = $this->option('model'); $parts = explode('/', $name); $classBase = array_pop($parts); $subNamespace = implode('\\', $parts); $controllerClass = $classBase . 'Controller'; $requestClass = $classBase . 'Request'; $serviceClass = $classBase . 'Service'; $modelClass = $model ? $model : $classBase; $refer = lcfirst($modelClass); $permission = $this->option('permission') ?: 'GERENCIADOR_DEFAULT'; $controllerNamespace = 'App\\Http\\Controllers' . ($subNamespace ? "\\{$subNamespace}" : ''); $requestNamespace = 'App\\Http\\Requests' . ($subNamespace ? "\\{$subNamespace}" : ''); $serviceNamespace = 'App\\Http\\Services' . ($subNamespace ? "\\{$subNamespace}" : ''); $modelNamespace = 'App\\Models' . ($subNamespace ? "\\{$subNamespace}" : ''); $httpResourceNamespace = 'App\\Http\\Resources' . ($subNamespace ? "\\{$subNamespace}" : ''); $controllerDir = app_path('Http/Controllers' . ($parts ? '/' . implode('/', $parts) : '')); $requestDir = app_path('Http/Requests' . ($parts ? '/' . implode('/', $parts) : '')); $serviceDir = app_path('Http/Services' . ($parts ? '/' . implode('/', $parts) : '')); $modelDir = app_path('Models' . ($parts ? '/' . implode('/', $parts) : '')); $httpResourceDir = app_path('Http/Resources' . ($parts ? '/' . implode('/', $parts) : '')); foreach ([$controllerDir, $requestDir, $serviceDir, $modelDir, $httpResourceDir] as $dir) { if (!File::exists($dir)) { File::makeDirectory($dir, 0755, true); } } $controllerPath = "$controllerDir/{$controllerClass}.php"; $requestPath = "$requestDir/{$requestClass}.php"; $servicePath = "$serviceDir/{$serviceClass}.php"; $modelPath = "$modelDir/{$modelClass}.php"; $httpResourceClass = $classBase . 'Resource'; $httpResourcePath = "$httpResourceDir/{$httpResourceClass}.php"; // Views: lower camelCase incluindo subcaminhos $viewBase = lcfirst($classBase); $viewPartsLower = array_map(fn($p) => lcfirst($p), $parts); $viewNamespace = implode('.', $viewPartsLower); $fullViewPath = ($viewNamespace ? $viewNamespace . '.' : '') . $viewBase; $viewDir = resource_path('views/admin' . ($viewPartsLower ? '/' . implode('/', $viewPartsLower) : '') . '/' . $viewBase); if (!File::exists($viewDir)) { File::makeDirectory($viewDir, 0755, true); } $viewIndexPath = "$viewDir/index.blade.php"; $viewCreatePath = "$viewDir/create.blade.php"; $viewEditPath = "$viewDir/edit.blade.php"; $routesAdminPath = base_path('routes/admin.php'); $controllerStubPath = base_path('stubs/resource/controller.stub'); $requestStubPath = base_path('stubs/resource/request.stub'); $serviceStubPath = base_path('stubs/resource/service.stub'); $modelStubPath = base_path('stubs/resource/model.stub'); $httpResourceStubPath = base_path('stubs/resource/http_resource.stub'); $viewIndexStubPath = base_path('stubs/resource/views/index.stub'); $viewCreateStubPath = base_path('stubs/resource/views/create.stub'); $viewEditStubPath = base_path('stubs/resource/views/edit.stub'); $controllerContent = File::exists($controllerStubPath) ? File::get($controllerStubPath) : "<?php\n\nnamespace {{ namespace }};\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\View\\View;\n\nclass {{ class }} extends Controller { }\n"; $requestContent = File::exists($requestStubPath) ? File::get($requestStubPath) : "<?php\n\nnamespace {{ namespace }};\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass {{ class }} extends FormRequest { public function authorize(): bool { return true; } public function rules(): array { return []; } }\n"; $serviceContent = File::exists($serviceStubPath) ? File::get($serviceStubPath) : "<?php\n\nnamespace {{ namespace }};\n\nclass {{ class }} { }\n"; $modelContent = File::exists($modelStubPath) ? File::get($modelStubPath) : "<?php\n\nnamespace {{ namespace }};\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass {{ class }} extends Model { protected \\$connection='mysql'; public \\$incrementing=false; protected \\$keyType='string'; }\n"; $httpResourceContent = File::exists($httpResourceStubPath) ? File::get($httpResourceStubPath) : "<?php\n\nnamespace {{ namespace }};\n\nuse App\\Http\\Controllers\\Controller;\n\nclass {{ class }} extends Controller { }\n"; $viewIndexContent = File::exists($viewIndexStubPath) ? File::get($viewIndexStubPath) : "@extends('layouts.admin.theme')\n@section('title', env('APP_NAME').' :: '.__('Lista {{ class }}'))\n@section('content')\n<div class=\"card shadow-sm\">\n@php \$headLine = __('Lista {{ class }}'); @endphp\n@include('components.buttons._headLineButtonsBackAdd', ['headLine' => \$headLine, 'routeBack' => 'admin.dashboard', 'nameBack' => __('Voltar'), 'routeAdd' => 'admin.{{ fullViewPath }}.create', 'nameAdd' => __('Novo'), 'permission' => '{{ permission }}'])\n<div class=\"card-body\">\n<x-tables._table :thead=\"['#','Nome','Ações']\" :pagination=\"\$items->links()\">\n<x-slot name=\"body\">\n@foreach(\$items as \$i)\n<tr><td>{{ \$loop->iteration }}</td><td>{{ \$i->id }}</td><td></td></tr>\n@endforeach\n</x-slot>\n</x-tables._table>\n</div>\n</div>\n@endsection\n"; $viewCreateContent = File::exists($viewCreateStubPath) ? File::get($viewCreateStubPath) : "@extends('layouts.admin.theme')\n@section('title', env('APP_NAME').' :: '.__('Criar {{ class }}'))\n@section('content')\n<div class=\"card shadow-sm\">\n@php \$headLine = __('Criar {{ class }}'); @endphp\n@include('components.buttons._headLineButtonsBackAdd', ['headLine' => \$headLine, 'routeBack' => 'admin.{{ fullViewPath }}.index', 'nameBack' => __('Voltar'), 'permission' => '{{ permission }}'])\n<div class=\"card-body\">\n@include('errors.messageFlash')\n<form action=\"{{ route('admin.{{ fullViewPath }}.store') }}\" method=\"POST\">@csrf\n@include('components.inputs._inputType', ['label'=>'Nome','name'=>'nome','required'=>true])\n<button class=\"btn btn-success\" type=\"submit\">{{ __('Salvar') }}</button>\n</form>\n</div>\n</div>\n@endsection\n"; $viewEditContent = File::exists($viewEditStubPath) ? File::get($viewEditStubPath) : "@extends('layouts.admin.theme')\n@section('title', env('APP_NAME').' :: '.__('Editar {{ class }}'))\n@section('content')\n<div class=\"card shadow-sm\">\n@php \$headLine = __('Editar {{ class }}'); @endphp\n@include('components.buttons._headLineButtonsBackAdd', ['headLine' => \$headLine, 'routeBack' => 'admin.{{ fullViewPath }}.index', 'nameBack' => __('Voltar'), 'permission' => '{{ permission }}'])\n<div class=\"card-body\">\n@include('errors.messageFlash')\n<form action=\"{{ route('admin.{{ fullViewPath }}.update', \${{ refer }}->id) }}\" method=\"POST\">@csrf @method('PUT')\n@include('components.inputs._inputType', ['label'=>'Nome','name'=>'nome','required'=>true,'old'=>\${{ refer }}->nome ?? '' ])\n<button class=\"btn btn-success\" type=\"submit\">{{ __('Salvar') }}</button>\n</form>\n</div>\n</div>\n@endsection\n"; $controllerContent = str_replace(['{{ namespace }}', '{{ class }}', '{{ model }}', '{{ refer }}', '{{ permission }}','{{ viewBase }}','{{ model_namespace }}','{{ fullViewPath }}'], [$controllerNamespace, $controllerClass, $modelClass, $refer, $permission, $viewBase, $modelNamespace, $fullViewPath], $controllerContent); $requestContent = str_replace(['{{ namespace }}', '{{ class }}', '{{ model }}', '{{ refer }}'], [$requestNamespace, $requestClass, $modelClass, $refer], $requestContent); $serviceContent = str_replace(['{{ namespace }}', '{{ class }}', '{{ model }}', '{{ refer }}'], [$serviceNamespace, $serviceClass, $modelClass, $refer], $serviceContent); $modelContent = str_replace(['{{ namespace }}', '{{ class }}', '{{ model }}', '{{ refer }}'], [$modelNamespace, $modelClass, $modelClass, $refer], $modelContent); $httpResourceContent = str_replace(['{{ namespace }}', '{{ class }}', '{{ model }}', '{{ refer }}'], [$httpResourceNamespace, $httpResourceClass, $modelClass, $refer], $httpResourceContent); $viewIndexContent = str_replace(['{{ permission }}','{{ fullViewPath }}','{{ class }}'], [$permission,$fullViewPath,$classBase], $viewIndexContent); $viewCreateContent = str_replace(['{{ permission }}','{{ fullViewPath }}','{{ class }}'], [$permission,$fullViewPath,$classBase], $viewCreateContent); $referVar = '$' . $refer; $viewEditContent = str_replace(['{{ permission }}','{{ fullViewPath }}','{{ class }}','${{ refer }}'], [$permission,$fullViewPath,$classBase,$referVar], $viewEditContent); // Append resource route to routes/admin.php with namespaced view path if (File::exists($routesAdminPath)) { $resourceUri = ($viewNamespace ? $viewNamespace . '/' : '') . $viewBase; $routeSnippet = "\n// Auto-generated resource: {$classBase} ({$fullViewPath})\nRoute::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth']], function () {\n Route::resource('{$resourceUri}', \\{$controllerNamespace}\\{$controllerClass}::class, ['as' => 'admin']);\n});\n"; $adminContent = File::get($routesAdminPath); if (strpos($adminContent, "Route::resource('{$resourceUri}'") === false) { File::append($routesAdminPath, $routeSnippet); } } File::put($controllerPath, $controllerContent); File::put($requestPath, $requestContent); File::put($servicePath, $serviceContent); File::put($modelPath, $modelContent); File::put($httpResourcePath, $httpResourceContent); File::put($viewIndexPath, $viewIndexContent); File::put($viewCreatePath, $viewCreateContent); File::put($viewEditPath, $viewEditContent); $this->info("✅ Resource criado: \nController: {$controllerPath}\nRequest: {$requestPath}\nService: {$servicePath}\nModel: {$modelPath}\nHttp Resource: {$httpResourcePath}\nViews: {$viewDir}"); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.04 |
proxy
|
phpinfo
|
Settings