我在php 8.1中使用symfony 5.4,我想考虑一组用于Swagger文档的属性,在每个控制器方法之前,我至少有以下5个属性:

#[OA\Response(
    response: 400,
    description: 'Bad parameters',
    content: new OA\JsonContent(example: ['code' => 400, 'message' => 'Bad Request', 'appCode' => 5000])
)]
#[OA\Response(
    response: 401,
    description: 'JWT Token not found (appCode = 5001) or expired (appCode = 5002)',
    content: new OA\JsonContent(example: ['code' => 401, 'message' => 'JWT Token not found', 'appCode' => 5001])
)]
#[OA\Response(
    response: 403,
    description: 'Insufficient privileges',
    content: new OA\JsonContent(example: ['code' => 403, 'message' => 'Forbidden', 'appCode' => 5003])
)]
#[Security(name: 'Bearer')]
#[OA\Tag(name: 'User')]

它占用大量空间并且是重复的,因此我想创建一个可以用作以下内容的属性:

#[SwaggerUtils(tag: 'User')]

它将执行与编写前面5个属性相同的工作,如Nestjs(https://docs.nestjs.com/custom-decorators#decorator-composition)中的装饰符组合.

这在PHP中可能吗?

我找到的关于PHP属性的最好帖子是https://www.amitmerchant.com/how-to-use-php-80-attributes/. 但我不知道如何才能实现我想要的.

推荐答案

尽管它们可以用于许多相同的目的,但修饰符(如在Python中找到的)和属性/批注(如在PHP中找到的)和属性/批注(如在PHP中找到的)在实现上有很大的不同,因此这种功能不容易从一个转换为另一个.

对于修饰符,有一个回调函数,它接受元素(例如函数或类)的定义,并以各种方式操作它.例如,用@auth修饰函数可能会返回一个函数定义,该函数定义在运行代码主体之前判断身份验证.这使得示例中所示的"修饰器组合"相对简单:如果一个修饰器只是一个回调函数,那么您可以编写一个运行两个现有回调函数的修饰器,这相当于同时添加了这两个函数.

属性不直接添加任何行为;相反,它们将一些任意元数据附加到程序的元素,这些元素可以通过反射API读取.如果没有任何东西查找属性,则它什么也不做;另一方面,两段不同的代码既可以查找属性,又可以基于它做出不同的决策.这意味着新的SwaggerUtils属性必须对生成Swagger文档的代码有意义.

从理论上讲,您可以在现有的Swagger文档代码之前运行一些代码,该代码查找SwaggerUtils属性并添加"Composed"属性.然而,据我所知,没有办法通过反射来实现write个属性,只能通过重写实际的源代码来实现.

Php相关问答推荐

未在moodle上运行的计划任务

WooCommerce产品按特定元数据的自定义数字排序选项

MariaDB 11.3.2+PHP:服务器向客户端发送未知的字符集(0).请向开发人员报告

Laravel 10 -扩展现有的artisan命令?

使用MySQLi使用连接字符串设置字符集

在laravel 9或10 php中向中间件响应添加自定义数据

在WooCommerce中只允许高价产品的BACS付款

从WooCommerce管理订单汇总中隐藏原始小计行

隐藏WooCommerce管理子菜单;主页;来自store 经理

Laravel withOnly不限制查询

如何使用 PHP 将带有图像的文本上传到 Linkedin?

WooCommerce 以编程方式添加的费用不会持续存在

如何在 Woocommerce 中自动删除旧的已完成订单

奇怪的 preg_match_all() 行为

在shopware 6.5上可以使用什么事件来判断刚刚支付的订单的状态

在 PHP 8.2 中使用 PHP Spreadsheet 和 CodeIgniter 3 导出 Excel 时出错

Woocommerce的数量和价格条件

在 Botiga 主题模板中添加复选框到政策行.Woocommerce

正则表达式抓取递归括号的内容

php-http/discovery 插件 1.15.1 是否仍在使用自己的模块 destruct Contao 4.13 中的composer 安装?