symfony API平台-本地主机服务器配置路由后404 Not Found

axr492tv  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(115)

我在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
在配置文档中的服务器之前,路由按预期工作。会出现什么问题?

2q5ifsrm

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进行以下更改:

api_platform:
    resource: .
    type: api_platform
    prefix: /php-api

再一次:确保您的配置匹配!

相关问题