From bf341028dd992641ff1e62ca72dff7d21ebf2225 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Tue, 16 Sep 2025 18:36:48 +0900 Subject: [PATCH 1/4] feat: add model fields validation to order_by in search request generator refs: https://github.com/RonasIT/laravel-entity-generator/issues/194 --- src/Generators/RequestsGenerator.php | 3 ++- stubs/request.blade.php | 12 ++++++++++-- .../fixtures/RequestGeneratorTest/create_request.php | 3 ++- .../fixtures/RequestGeneratorTest/delete_request.php | 3 ++- tests/fixtures/RequestGeneratorTest/get_request.php | 3 ++- .../fixtures/RequestGeneratorTest/search_request.php | 6 ++++-- .../fixtures/RequestGeneratorTest/update_request.php | 3 ++- 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Generators/RequestsGenerator.php b/src/Generators/RequestsGenerator.php index 0e892435..bc0ce4f8 100644 --- a/src/Generators/RequestsGenerator.php +++ b/src/Generators/RequestsGenerator.php @@ -72,7 +72,8 @@ protected function createRequest($method, $needToValidate = true, $parameters = 'needToValidate' => $needToValidate, 'requestsFolder' => $requestsFolder, 'namespace' => $this->getOrCreateNamespace('requests'), - 'servicesNamespace' => $this->getOrCreateNamespace('services') + 'servicesNamespace' => $this->getOrCreateNamespace('services'), + 'entityNamespace' => $this->getModelClass($this->model), ]); $this->saveClass('requests', "{$method}{$modelName}Request", diff --git a/stubs/request.blade.php b/stubs/request.blade.php index 3d1a8e05..a06e871f 100644 --- a/stubs/request.blade.php +++ b/stubs/request.blade.php @@ -6,8 +6,12 @@ use {{ $servicesNamespace }}\{{ $entity }}Service; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @endif +@if($method === $requestsGenerator::SEARCH_METHOD) +use {{ $entityNamespace }}; +@endif +use RonasIT\Support\Http\BaseRequest; -class {{ $method }}{{ $entity }}Request extends Request +class {{ $method }}{{ $entity }}Request extends BaseRequest { @if($method !== $requestsGenerator::DELETE_METHOD) public function rules(): array @@ -15,7 +19,11 @@ public function rules(): array @if(!empty($parameters)) return [ @foreach($parameters as $parameter) - '{{ $parameter['name'] }}' => '{{ implode('|', $parameter['rules']) }}', + @if($parameter['name'] === 'order_by') + '{{ $parameter['name'] }}' => '{{ implode('|', $parameter['rules']) }}|in:' . self::getOrderableFields({{ Str::singular($entity) }}::class), +@continue; + @endif + '{{ $parameter['name'] }}' => '{{ implode('|', $parameter['rules']) }}', @endforeach ]; @else diff --git a/tests/fixtures/RequestGeneratorTest/create_request.php b/tests/fixtures/RequestGeneratorTest/create_request.php index 122aefdb..b7063e2c 100644 --- a/tests/fixtures/RequestGeneratorTest/create_request.php +++ b/tests/fixtures/RequestGeneratorTest/create_request.php @@ -3,8 +3,9 @@ namespace App\Http\Requests\Post; use App\Http\Requests\Request; +use RonasIT\Support\Http\BaseRequest; -class CreatePostRequest extends Request +class CreatePostRequest extends BaseRequest { public function rules(): array { diff --git a/tests/fixtures/RequestGeneratorTest/delete_request.php b/tests/fixtures/RequestGeneratorTest/delete_request.php index 2b98c521..fb62e8ea 100644 --- a/tests/fixtures/RequestGeneratorTest/delete_request.php +++ b/tests/fixtures/RequestGeneratorTest/delete_request.php @@ -5,8 +5,9 @@ use App\Http\Requests\Request; use App\Services\PostService; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use RonasIT\Support\Http\BaseRequest; -class DeletePostRequest extends Request +class DeletePostRequest extends BaseRequest { public function validateResolved(): void { diff --git a/tests/fixtures/RequestGeneratorTest/get_request.php b/tests/fixtures/RequestGeneratorTest/get_request.php index 4440a220..a2c9d649 100644 --- a/tests/fixtures/RequestGeneratorTest/get_request.php +++ b/tests/fixtures/RequestGeneratorTest/get_request.php @@ -5,8 +5,9 @@ use App\Http\Requests\Request; use App\Services\PostService; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use RonasIT\Support\Http\BaseRequest; -class GetPostRequest extends Request +class GetPostRequest extends BaseRequest { public function rules(): array { diff --git a/tests/fixtures/RequestGeneratorTest/search_request.php b/tests/fixtures/RequestGeneratorTest/search_request.php index 75a646ea..565cbdcb 100644 --- a/tests/fixtures/RequestGeneratorTest/search_request.php +++ b/tests/fixtures/RequestGeneratorTest/search_request.php @@ -3,8 +3,10 @@ namespace App\Http\Requests\Post; use App\Http\Requests\Request; +use App\Models\Post; +use RonasIT\Support\Http\BaseRequest; -class SearchPostsRequest extends Request +class SearchPostsRequest extends BaseRequest { public function rules(): array { @@ -16,7 +18,7 @@ public function rules(): array 'desc' => 'boolean', 'all' => 'boolean', 'with' => 'array', - 'order_by' => 'string', + 'order_by' => 'string|in:' . self::getOrderableFields(Post::class), 'query' => 'string|nullable', 'with.*' => 'string', ]; diff --git a/tests/fixtures/RequestGeneratorTest/update_request.php b/tests/fixtures/RequestGeneratorTest/update_request.php index a1eae966..f7383fec 100644 --- a/tests/fixtures/RequestGeneratorTest/update_request.php +++ b/tests/fixtures/RequestGeneratorTest/update_request.php @@ -5,8 +5,9 @@ use App\Http\Requests\Request; use App\Services\PostService; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use RonasIT\Support\Http\BaseRequest; -class UpdatePostRequest extends Request +class UpdatePostRequest extends BaseRequest { public function rules(): array { From e69fce5dcd997e3d5b081c0e7c27f9e8a49586a3 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Tue, 16 Sep 2025 19:49:42 +0900 Subject: [PATCH 2/4] fix: remove redundant code, fix test assertions refs: https://github.com/RonasIT/laravel-entity-generator/issues/194 --- stubs/request.blade.php | 3 +-- tests/CommandTest.php | 2 +- tests/fixtures/CommandTest/search_request.php | 3 ++- .../CommandTest/subfolder/search_request.php | 23 +++++++++++++++++++ .../RequestGeneratorTest/create_request.php | 3 +-- .../RequestGeneratorTest/delete_request.php | 3 +-- .../RequestGeneratorTest/get_request.php | 3 +-- .../RequestGeneratorTest/search_request.php | 3 +-- .../RequestGeneratorTest/update_request.php | 3 +-- 9 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 tests/fixtures/CommandTest/subfolder/search_request.php diff --git a/stubs/request.blade.php b/stubs/request.blade.php index a06e871f..d21128ae 100644 --- a/stubs/request.blade.php +++ b/stubs/request.blade.php @@ -9,9 +9,8 @@ @if($method === $requestsGenerator::SEARCH_METHOD) use {{ $entityNamespace }}; @endif -use RonasIT\Support\Http\BaseRequest; -class {{ $method }}{{ $entity }}Request extends BaseRequest +class {{ $method }}{{ $entity }}Request extends Request { @if($method !== $requestsGenerator::DELETE_METHOD) public function rules(): array diff --git a/tests/CommandTest.php b/tests/CommandTest.php index bd86f318..020d9847 100644 --- a/tests/CommandTest.php +++ b/tests/CommandTest.php @@ -126,7 +126,7 @@ public function testCallCommandSubFoldersModel() $this->assertGeneratedFileEquals('service.php', 'app/Services/PostService.php'); $this->assertGeneratedFileEquals('create_request.php', 'app/Http/Requests/Post/CreatePostRequest.php'); $this->assertGeneratedFileEquals('get_request.php', 'app/Http/Requests/Post/GetPostRequest.php'); - $this->assertGeneratedFileEquals('search_request.php', 'app/Http/Requests/Post/SearchPostsRequest.php'); + $this->assertGeneratedFileEquals('subfolder/search_request.php', 'app/Http/Requests/Post/SearchPostsRequest.php'); $this->assertGeneratedFileEquals('update_request.php', 'app/Http/Requests/Post/UpdatePostRequest.php'); $this->assertGeneratedFileEquals('delete_request.php', 'app/Http/Requests/Post/DeletePostRequest.php'); $this->assertGeneratedFileEquals('controller.php', 'app/Http/Controllers/PostController.php'); diff --git a/tests/fixtures/CommandTest/search_request.php b/tests/fixtures/CommandTest/search_request.php index d905e6b1..809b527e 100644 --- a/tests/fixtures/CommandTest/search_request.php +++ b/tests/fixtures/CommandTest/search_request.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\Post; use App\Http\Requests\Request; +use RonasIT\Support\Tests\Support\Command\Models\Post; class SearchPostsRequest extends Request { @@ -11,7 +12,7 @@ public function rules(): array return [ 'page' => 'integer', 'per_page' => 'integer', - 'order_by' => 'string', + 'order_by' => 'string|in:' . self::getOrderableFields(Post::class), 'desc' => 'boolean', 'all' => 'boolean', 'with' => 'array', diff --git a/tests/fixtures/CommandTest/subfolder/search_request.php b/tests/fixtures/CommandTest/subfolder/search_request.php new file mode 100644 index 00000000..270d0776 --- /dev/null +++ b/tests/fixtures/CommandTest/subfolder/search_request.php @@ -0,0 +1,23 @@ + 'integer', + 'per_page' => 'integer', + 'order_by' => 'string|in:' . self::getOrderableFields(Post::class), + 'desc' => 'boolean', + 'all' => 'boolean', + 'with' => 'array', + 'query' => 'string|nullable', + 'with.*' => 'string', + ]; + } +} \ No newline at end of file diff --git a/tests/fixtures/RequestGeneratorTest/create_request.php b/tests/fixtures/RequestGeneratorTest/create_request.php index b7063e2c..122aefdb 100644 --- a/tests/fixtures/RequestGeneratorTest/create_request.php +++ b/tests/fixtures/RequestGeneratorTest/create_request.php @@ -3,9 +3,8 @@ namespace App\Http\Requests\Post; use App\Http\Requests\Request; -use RonasIT\Support\Http\BaseRequest; -class CreatePostRequest extends BaseRequest +class CreatePostRequest extends Request { public function rules(): array { diff --git a/tests/fixtures/RequestGeneratorTest/delete_request.php b/tests/fixtures/RequestGeneratorTest/delete_request.php index fb62e8ea..2b98c521 100644 --- a/tests/fixtures/RequestGeneratorTest/delete_request.php +++ b/tests/fixtures/RequestGeneratorTest/delete_request.php @@ -5,9 +5,8 @@ use App\Http\Requests\Request; use App\Services\PostService; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use RonasIT\Support\Http\BaseRequest; -class DeletePostRequest extends BaseRequest +class DeletePostRequest extends Request { public function validateResolved(): void { diff --git a/tests/fixtures/RequestGeneratorTest/get_request.php b/tests/fixtures/RequestGeneratorTest/get_request.php index a2c9d649..4440a220 100644 --- a/tests/fixtures/RequestGeneratorTest/get_request.php +++ b/tests/fixtures/RequestGeneratorTest/get_request.php @@ -5,9 +5,8 @@ use App\Http\Requests\Request; use App\Services\PostService; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use RonasIT\Support\Http\BaseRequest; -class GetPostRequest extends BaseRequest +class GetPostRequest extends Request { public function rules(): array { diff --git a/tests/fixtures/RequestGeneratorTest/search_request.php b/tests/fixtures/RequestGeneratorTest/search_request.php index 565cbdcb..b40cacb7 100644 --- a/tests/fixtures/RequestGeneratorTest/search_request.php +++ b/tests/fixtures/RequestGeneratorTest/search_request.php @@ -4,9 +4,8 @@ use App\Http\Requests\Request; use App\Models\Post; -use RonasIT\Support\Http\BaseRequest; -class SearchPostsRequest extends BaseRequest +class SearchPostsRequest extends Request { public function rules(): array { diff --git a/tests/fixtures/RequestGeneratorTest/update_request.php b/tests/fixtures/RequestGeneratorTest/update_request.php index f7383fec..a1eae966 100644 --- a/tests/fixtures/RequestGeneratorTest/update_request.php +++ b/tests/fixtures/RequestGeneratorTest/update_request.php @@ -5,9 +5,8 @@ use App\Http\Requests\Request; use App\Services\PostService; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use RonasIT\Support\Http\BaseRequest; -class UpdatePostRequest extends BaseRequest +class UpdatePostRequest extends Request { public function rules(): array { From 381bdf6298c5b4c23136bff5ff1e1060a1aa4327 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Tue, 16 Sep 2025 19:55:10 +0900 Subject: [PATCH 3/4] refactor: add condition to request stub refs: https://github.com/RonasIT/laravel-entity-generator/issues/194 --- stubs/request.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/request.blade.php b/stubs/request.blade.php index d21128ae..ab512a5d 100644 --- a/stubs/request.blade.php +++ b/stubs/request.blade.php @@ -18,7 +18,7 @@ public function rules(): array @if(!empty($parameters)) return [ @foreach($parameters as $parameter) - @if($parameter['name'] === 'order_by') + @if($method === $requestsGenerator::SEARCH_METHOD && $parameter['name'] === 'order_by') '{{ $parameter['name'] }}' => '{{ implode('|', $parameter['rules']) }}|in:' . self::getOrderableFields({{ Str::singular($entity) }}::class), @continue; @endif From 546717ed25c8d3d4aa949709e430382a907588b3 Mon Sep 17 00:00:00 2001 From: Ni Nelli Date: Fri, 26 Sep 2025 12:37:38 +0900 Subject: [PATCH 4/4] refactor: change adding getOrderableFields to generated SearchRequest refs: https://github.com/RonasIT/laravel-entity-generator/issues/194 --- src/Generators/RequestsGenerator.php | 4 ++++ stubs/request.blade.php | 6 +----- tests/CommandTest.php | 2 +- tests/fixtures/CommandTest/search_request.php | 2 +- ...earch_request.php => search_request_subfolder_model.php} | 2 +- tests/fixtures/RequestGeneratorTest/search_request.php | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) rename tests/fixtures/CommandTest/{subfolder/search_request.php => search_request_subfolder_model.php} (85%) diff --git a/src/Generators/RequestsGenerator.php b/src/Generators/RequestsGenerator.php index 184716e5..504b2229 100644 --- a/src/Generators/RequestsGenerator.php +++ b/src/Generators/RequestsGenerator.php @@ -195,6 +195,10 @@ protected function getRules($name, $type, $required, $nullable, $present): array $rules[] = 'present'; } + if ($name === 'order_by') { + $rules[] = 'in:'; + } + return [ 'name' => $name, 'rules' => $rules diff --git a/stubs/request.blade.php b/stubs/request.blade.php index ab512a5d..bb8fb4b8 100644 --- a/stubs/request.blade.php +++ b/stubs/request.blade.php @@ -18,11 +18,7 @@ public function rules(): array @if(!empty($parameters)) return [ @foreach($parameters as $parameter) - @if($method === $requestsGenerator::SEARCH_METHOD && $parameter['name'] === 'order_by') - '{{ $parameter['name'] }}' => '{{ implode('|', $parameter['rules']) }}|in:' . self::getOrderableFields({{ Str::singular($entity) }}::class), -@continue; - @endif - '{{ $parameter['name'] }}' => '{{ implode('|', $parameter['rules']) }}', + '{{ $parameter['name'] }}' => '{!! implode('|', $parameter['rules']) !!}'@if ($parameter['name'] === 'order_by') . $this->getOrderableFields({{ Str::singular($entity) }}::class)@endif, @endforeach ]; @else diff --git a/tests/CommandTest.php b/tests/CommandTest.php index 020d9847..03ab44dc 100644 --- a/tests/CommandTest.php +++ b/tests/CommandTest.php @@ -126,7 +126,7 @@ public function testCallCommandSubFoldersModel() $this->assertGeneratedFileEquals('service.php', 'app/Services/PostService.php'); $this->assertGeneratedFileEquals('create_request.php', 'app/Http/Requests/Post/CreatePostRequest.php'); $this->assertGeneratedFileEquals('get_request.php', 'app/Http/Requests/Post/GetPostRequest.php'); - $this->assertGeneratedFileEquals('subfolder/search_request.php', 'app/Http/Requests/Post/SearchPostsRequest.php'); + $this->assertGeneratedFileEquals('search_request_subfolder_model.php', 'app/Http/Requests/Post/SearchPostsRequest.php'); $this->assertGeneratedFileEquals('update_request.php', 'app/Http/Requests/Post/UpdatePostRequest.php'); $this->assertGeneratedFileEquals('delete_request.php', 'app/Http/Requests/Post/DeletePostRequest.php'); $this->assertGeneratedFileEquals('controller.php', 'app/Http/Controllers/PostController.php'); diff --git a/tests/fixtures/CommandTest/search_request.php b/tests/fixtures/CommandTest/search_request.php index 809b527e..10096829 100644 --- a/tests/fixtures/CommandTest/search_request.php +++ b/tests/fixtures/CommandTest/search_request.php @@ -12,7 +12,7 @@ public function rules(): array return [ 'page' => 'integer', 'per_page' => 'integer', - 'order_by' => 'string|in:' . self::getOrderableFields(Post::class), + 'order_by' => 'string|in:' . $this->getOrderableFields(Post::class), 'desc' => 'boolean', 'all' => 'boolean', 'with' => 'array', diff --git a/tests/fixtures/CommandTest/subfolder/search_request.php b/tests/fixtures/CommandTest/search_request_subfolder_model.php similarity index 85% rename from tests/fixtures/CommandTest/subfolder/search_request.php rename to tests/fixtures/CommandTest/search_request_subfolder_model.php index 270d0776..39db73e5 100644 --- a/tests/fixtures/CommandTest/subfolder/search_request.php +++ b/tests/fixtures/CommandTest/search_request_subfolder_model.php @@ -12,7 +12,7 @@ public function rules(): array return [ 'page' => 'integer', 'per_page' => 'integer', - 'order_by' => 'string|in:' . self::getOrderableFields(Post::class), + 'order_by' => 'string|in:' . $this->getOrderableFields(Post::class), 'desc' => 'boolean', 'all' => 'boolean', 'with' => 'array', diff --git a/tests/fixtures/RequestGeneratorTest/search_request.php b/tests/fixtures/RequestGeneratorTest/search_request.php index b40cacb7..580a4f17 100644 --- a/tests/fixtures/RequestGeneratorTest/search_request.php +++ b/tests/fixtures/RequestGeneratorTest/search_request.php @@ -17,7 +17,7 @@ public function rules(): array 'desc' => 'boolean', 'all' => 'boolean', 'with' => 'array', - 'order_by' => 'string|in:' . self::getOrderableFields(Post::class), + 'order_by' => 'string|in:' . $this->getOrderableFields(Post::class), 'query' => 'string|nullable', 'with.*' => 'string', ];