diff --git a/src/Laravel/.php-cs-fixer.cache b/src/Laravel/.php-cs-fixer.cache new file mode 100644 index 00000000000..acfb2353b17 --- /dev/null +++ b/src/Laravel/.php-cs-fixer.cache @@ -0,0 +1 @@ +{"php":"8.3.14","version":"3.64.0:v3.64.0#58dd9c931c785a79739310aef5178928305ffa67","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"attribute_placement":"ignore","on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"stdin.php":"b44802ce1721771a99bd5c345e644954"}} \ No newline at end of file diff --git a/src/Laravel/config/api-platform.php b/src/Laravel/config/api-platform.php index ef125a90022..c5fefe99413 100644 --- a/src/Laravel/config/api-platform.php +++ b/src/Laravel/config/api-platform.php @@ -62,7 +62,14 @@ 'graphql' => [ 'enabled' => false, 'nesting_separator' => '__', - 'introspection' => ['enabled' => true] + 'introspection' => ['enabled' => true], + // 'middleware' => null + ], + + 'graphiql' => [ + // 'enabled' => true, + // 'domain' => null, + // 'middleware' => null ], 'exception_to_status' => [ diff --git a/src/Laravel/phpstan.neon.dist b/src/Laravel/phpstan.neon.dist index dc7ad4dd6d5..0e2effea271 100644 --- a/src/Laravel/phpstan.neon.dist +++ b/src/Laravel/phpstan.neon.dist @@ -8,6 +8,7 @@ parameters: paths: - ApiResource - config + - routes - Controller - Eloquent - Exception @@ -17,8 +18,3 @@ parameters: - Tests ignoreErrors: - '#Cannot call method expectsQuestion#' -# -# excludePaths: -# - ./*/*/FileToBeExcluded.php -# -# checkMissingIterableValueType: false diff --git a/src/Laravel/routes/api.php b/src/Laravel/routes/api.php index d3ebb4de9bd..fe2eae68b6e 100644 --- a/src/Laravel/routes/api.php +++ b/src/Laravel/routes/api.php @@ -25,7 +25,7 @@ use Illuminate\Support\Facades\Route; $globalMiddlewares = config()->get('api-platform.routes.middleware', []); -$domain = config()->get('api-platform.routes.domain'); +$domain = config()->get('api-platform.routes.domain', ''); Route::domain($domain)->middleware($globalMiddlewares)->group(function (): void { $resourceNameCollectionFactory = app()->make(ResourceNameCollectionFactoryInterface::class); @@ -35,20 +35,23 @@ foreach ($resourceMetadataFactory->create($resourceClass) as $resourceMetadata) { foreach ($resourceMetadata->getOperations() as $operation) { $uriTemplate = str_replace('{._format}', '{_format?}', $operation->getUriTemplate()); - $uriTemplate = rtrim($operation->getRoutePrefix(), '/').'/'.ltrim($uriTemplate, '/'); /* @var HttpOperation $operation */ - Route::addRoute($operation->getMethod(), $uriTemplate, ApiPlatformController::class) - ->middleware(ApiPlatformMiddleware::class.':'.$operation->getName()) - ->middleware($operation->getMiddleware()) + $route = Route::addRoute($operation->getMethod(), $uriTemplate, ['uses' => ApiPlatformController::class, 'prefix' => $operation->getRoutePrefix() ?? '']) ->where('_format', '^\.[a-zA-Z]+') ->name($operation->getName()) ->setDefaults(['_api_operation_name' => $operation->getName(), '_api_resource_class' => $operation->getClass()]); + + $route->middleware(ApiPlatformMiddleware::class.':'.$operation->getName()); + + if ($operation->getMiddleware()) { + $route->middleware($operation->getMiddleware()); + } } } } - $prefix = config()->get('api-platform.defaults.route_prefix') ?? ''; + $prefix = config()->get('api-platform.defaults.route_prefix', ''); Route::group(['prefix' => $prefix], function (): void { Route::group(['middleware' => ApiPlatformMiddleware::class], function (): void { @@ -67,11 +70,22 @@ }); if (config()->get('api-platform.graphql.enabled')) { - Route::addRoute(['POST', 'GET'], '/graphql', GraphQlEntrypointController::class) - ->name('api_graphql'); + Route::group([ + 'middleware' => config()->get('api-platform.graphql.middleware', []), + ], function (): void { + Route::addRoute(['POST', 'GET'], '/graphql', GraphQlEntrypointController::class) + ->name('api_graphql'); + }); - Route::get('/graphiql', GraphiQlController::class) - ->name('api_graphiql'); + if (config()->get('api-platform.graphiql.enabled', true)) { + Route::group([ + 'middleware' => config()->get('api-platform.graphiql.middleware', []), + 'domain' => config()->get('api-platform.graphiql.domain', ''), + ], function (): void { + Route::get('/graphiql', GraphiQlController::class) + ->name('api_graphiql'); + }); + } } }); });