diff --git a/src/Generators/RequestsGenerator.php b/src/Generators/RequestsGenerator.php index 8d01f156..504b2229 100644 --- a/src/Generators/RequestsGenerator.php +++ b/src/Generators/RequestsGenerator.php @@ -74,7 +74,8 @@ protected function createRequest($method, $needToValidate = true, $parameters = 'needToValidate' => $needToValidate, 'requestsFolder' => $requestsFolder, 'namespace' => $this->getNamespace('requests'), - 'servicesNamespace' => $this->getNamespace('services') + 'servicesNamespace' => $this->getNamespace('services'), + 'entityNamespace' => $this->getModelClass($this->model), ]); $this->saveClass('requests', "{$method}{$modelName}Request", @@ -194,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 3d1a8e05..bb8fb4b8 100644 --- a/stubs/request.blade.php +++ b/stubs/request.blade.php @@ -6,6 +6,9 @@ use {{ $servicesNamespace }}\{{ $entity }}Service; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @endif +@if($method === $requestsGenerator::SEARCH_METHOD) +use {{ $entityNamespace }}; +@endif class {{ $method }}{{ $entity }}Request extends Request { @@ -15,7 +18,7 @@ public function rules(): array @if(!empty($parameters)) return [ @foreach($parameters as $parameter) - '{{ $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 bd86f318..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('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 d905e6b1..10096829 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:' . $this->getOrderableFields(Post::class), 'desc' => 'boolean', 'all' => 'boolean', 'with' => 'array', diff --git a/tests/fixtures/CommandTest/search_request_subfolder_model.php b/tests/fixtures/CommandTest/search_request_subfolder_model.php new file mode 100644 index 00000000..39db73e5 --- /dev/null +++ b/tests/fixtures/CommandTest/search_request_subfolder_model.php @@ -0,0 +1,23 @@ + 'integer', + 'per_page' => 'integer', + 'order_by' => 'string|in:' . $this->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/search_request.php b/tests/fixtures/RequestGeneratorTest/search_request.php index 75a646ea..580a4f17 100644 --- a/tests/fixtures/RequestGeneratorTest/search_request.php +++ b/tests/fixtures/RequestGeneratorTest/search_request.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\Post; use App\Http\Requests\Request; +use App\Models\Post; class SearchPostsRequest extends Request { @@ -16,7 +17,7 @@ public function rules(): array 'desc' => 'boolean', 'all' => 'boolean', 'with' => 'array', - 'order_by' => 'string', + 'order_by' => 'string|in:' . $this->getOrderableFields(Post::class), 'query' => 'string|nullable', 'with.*' => 'string', ];