php - API 平台 - UI 服务器端点定义

标签 php symfony api-platform.com

有人可以提供有关 API 平台 UI 的帮助吗?在文档中,我无法找到定义服务器的方法:

我希望服务器端点输出显示是在localhostdev还是prod上。

有人可以帮忙解决这个问题吗:

enter image description here

我在 Symfony 中使用它。

我不确定这是否与路由文件夹中的 api_platform.yaml 文件中的配置有关:

api_platform:
  resource: .
  type: api_platform
  prefix: /

我想配置服务器路径,例如:{domain/API_ROUTE},其中API_ROUTE被定义为.env变量。

最佳答案

您需要装饰OpenApiFactory。对于如何以及为什么,在SymfonyCast中有详细解释。 .

作为一个工作示例:在项目 /src/ApiPlatform/OpenApiFactoryDe​​corator.php 中创建一个包含以下内容的文件:

<?php

namespace App\ApiPlatform;

use ApiPlatform\OpenApi\Factory\OpenApiFactoryInterface;
use ApiPlatform\OpenApi\Model\Server;
use ApiPlatform\OpenApi\OpenApi;
use Symfony\Component\DependencyInjection\Attribute\AsDecorator;

#[AsDecorator('api_platform.openapi.factory')]
class OpenApiFactoryDecorator implements OpenApiFactoryInterface
{
    public function __construct(private OpenApiFactoryInterface $decorated) {}

    public function __invoke(array $context = []): OpenApi
    {
        $openApi = $this->decorated->__invoke($context);

        // Create an array with your servers.
        $servers = [
            new Server("https://dev.example.com/", "Development"),
            new Server("https://prod.example.com/", "Production")
        ];

        return $openApi->withServers($servers);
    }
}

上面的示例代码应该可以在具有 API Platform v3.1.* 的 Symfony v6.3.* 中运行,并在文档中提供配置服务器所需的内容。

注意:

每当您在 prod 环境中禁用文档(作为示例)时,您很可能会遇到上述代码的问题。每当禁用文档时都可能出现错误:服务“App\ApiPlatform\OpenApiFactoryDe​​corator”依赖于不存在的服务“api_platform.openapi.factory”。。为了解决这个问题,您应该使用 $onInvalid 参数来忽略无效引用,如下所示:

#[AsDecorator(
    decorates: 'api_platform.openapi.factory',
    onInvalid: ContainerInterface::IGNORE_ON_INVALID_REFERENCE, // This line is important to ignore errors whenever you disable the documentation in a specific environment.
)]

关于php - API 平台 - UI 服务器端点定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76990663/

相关文章:

php - 如何将 TCPDF 生成的 pdf 作为 Swiftmailer 附件发送

php - Codeigniter - 计算两个日期之间的日期

php - 在实体中创建一个方法,在调用它时执行延迟加载

mysql - Symfony 3 GitLab CI SQLSTATE[HY000] [2002] 没有这样的文件或目录 MySQL 连接

php - 如何在 Laravel 中执行 "remember me"登录选项?

symfony - Doctrine DQL 从关系表中删除

error-handling - 如果已经存在,则返回实体-API平台

php - ApiPlatform/Symfony - 生成资源路径

symfony - 如何将 api-platform {id} 更改为其他名称?

php - 在 Laravel 的路由组中跳过特定路由的中间件