gendoria / param-converter-bundle
添加了几个额外的参数转换器
1.2.0
2016-06-13 13:58 UTC
Requires
- php: >=5.3.0
- sensio/framework-extra-bundle: ~3.0
- symfony/framework-bundle: ~2.3|~3.0
Requires (Dev)
- symfony/expression-language: ~2.6|~3.0
- symfony/security-bundle: ~2.4|~3.0
Suggests
- symfony/expression-language
- symfony/psr-http-message-bridge: To use the PSR-7 converters
- symfony/security-bundle
README
Gendoria 参数转换器包为 Framework Extra Bundle 添加了一些转换器。
该包应与高于 5.4 版本的 PHP 所有版本兼容(请检查构建状态)。
安装
步骤 1:下载包
打开命令行控制台,进入您的项目目录并执行以下命令以下载此包的最新稳定版本
$ composer require gendoria/param-converter "~1"
此命令要求您全局安装了 Composer,具体请参阅 Composer 文档中的安装章节。
步骤 2:启用 Framework Extra 包
此包需要启用 Framework Extra 包。您可以通过将其添加到项目中 app/AppKernel.php
文件中注册的包列表中来完成此操作(如果尚未完成)
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), ); // ... } // ... }
步骤 3:启用包
然后,通过将其添加到项目中 app/AppKernel.php
文件中注册的包列表中来启用该包
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Gendoria\ParamConverterBundle\GendoriaParamConverterBundle(), ); // ... } // ... }
使用方法
您可以使用此包中的参数转换器,就像使用其他任何参数转换器一样。
服务参数转换器
您可以通过添加以下调用来使用它:
@ParamConverter("parameter_name", converter="service_param_converter", options={"service" = "service_id", "method" = "service_method", "arguments" = {"%requestParamName%", "@otherServiceId", "someParameter"})
其中第一个参数是参数名称,转换器指定要使用的转换器,选项 - 配置转换器。
必需的选项是服务(服务 ID)和方法(服务方法)。此外,您可以使用 "arguments" 选项传递方法参数。
参数是一个服务参数列表。它们有三种类型:
- 简单参数。这是默认选项。不添加额外的解析。
- 请求参数。您必须用 % 符号括住参数名称,并且转换器将从请求中提取它。例如,当您将参数定义为
%myParam%
时,服务将尝试从请求中获取参数myParam
。 - 服务参数。当您在参数前加上
@
字符时,它将被视为服务 ID。解析器将尝试从服务容器中获取服务并将其注入到方法调用中。如果服务未在容器中注册,则将抛出\InvalidArgumentException
。
转换器参数仅在转换可能与其他参数转换器(尤其是默认的 DoctrineParamConverter
)冲突时需要。
ArrayObject 参数转换器
此参数转换器可以用来将参数拆分成对象数组。参数必须是一个具有分隔值的字符串。默认分隔符是逗号,但您可以使用自己的、自定义的分隔符。
要调用参数转换器,您应使用以下注解:
@ParamConverter("parameter_name")
或使用自定义分隔符:
@ParamConverter("parameter_name", options={"delimiter" = "|"})
其中函数类型提示中的参数类型是 ArrayObject
。