我在 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
完整错误消息:
找不到“GET http://localhost/php-api/v1/examples/public”(来自“http://localhost/docs”)的路由, “类”:“Symfony\Component\HttpKernel\Exception\NotFoundHttpException
在配置文档中的服务器之前,路由已按预期工作。可能出什么问题了?
首先,此信息可以添加到您的第一个线程。
这个问题,说实话,错误信息已经很清楚了。未找到您的路线(例如生成的 URL 错误)。根据您的第一个线程并结合此信息,您的路线应该是:
http://localhost/v1/examples/public
而不是
http://localhost/php-api/v1/examples/public
就像我在您的第一个线程中的回答中所介绍的那样,服务器应该仅包含主机名(例如
http://localhost
)。通过查看您的代码,$_ENV['API_ROUTE']
添加了 /php-api/
部分。除了主机名之外,您不应添加任何其他内容。 API 平台中配置的任何前缀(检查您的第一个线程,以及提供的.yaml
配置)都会自动添加。
根据信息,要解决此问题,请从
$_ENV['API_ROUTE']
中删除 $envValue
或 new Server($envServerPath . $envValue,)
。或者至少确保仅添加主机名的服务器(例如。new Server('http://localhost/')
)。