我在API平台中注册服务器,如:
readonly class OpenApiFactoryDecorator implements OpenApiFactoryInterface
{
public function __construct(private OpenApiFactoryInterface $decorated) {}
public function __invoke(array $context = []): OpenApi
{
$envServerPath = $_ENV['API_SERVER_URL'];
$envValue = $_ENV['API_ROUTE'];
$openApi = $this->decorated->__invoke($context);
$servers = [
new Server($envServerPath . $envValue,)
];
return $openApi->withServers($servers);
}
得到:
在这样做之后,我的路由抛出404 Not Found
异常。
举例来说:
new Get(
uriTemplate: '/v1/examples/public',
status: Response::HTTP_OK,
controller: PublicExampleController::class,
paginationEnabled: false,
read: false,
name: 'public_endpoint'
)
尝试使用命令:
php bin/console debug:router
给出了路由的输出:
public_endpoint GET ANY ANY /v1/examples/public
完整错误消息:
No route found for“GET http://localhost/php-api/v1/examples/public”(from“http://localhost/docs”)",“class”:“Symfony\Component\HttpKernel\Exception\NotFoundHttpException
在配置文档中的服务器之前,路由按预期工作。会出现什么问题?
1条答案
按热度按时间2q5ifsrm1#
首先,这些信息可以添加到您的第一个线程。
关于这个问题,说实话,错误信息很清楚。你的路由没有找到(例如。生成的URL是错误的)。根据你的第一个线程并结合这些信息,你的路由应该是:
http://localhost/v1/examples/public
而不是
http://localhost/php-api/v1/examples/public
就像我在你的第一个线程上的回答一样,服务器应该只包含主机名(例如
http://localhost
)。从你的代码来看,$_ENV['API_ROUTE']
添加了/php-api/
部分。除了主机名,你不应该添加其他任何东西。在API平台中配置的任何前缀(检查你的第一个线程,以及提供的.yaml
配置)都会自动添加。根据这些信息,要解决此问题,请从
new Server($envServerPath . $envValue,)
中删除$_ENV['API_ROUTE']
或$envValue
。或者至少确保仅使用主机名添加服务器(例如new Server('http://localhost/')
)。上面的代码示例是单独针对
Swagger documentation
的,您的Swagger documentation
配置和API Platform
配置是两个独立的配置,您应该确保它们匹配!要更改
API Platform
中的路由前缀,请对/config/routes/api_platform.yaml
进行以下更改:再一次:确保您的配置匹配!