noxlogic / multiparam-bundle
此包为 symfony2 项目提供 multiParamConverter 注解。
Requires
- sensio/framework-extra-bundle: 2.1.x-dev
This package is auto-updated.
Last update: 2021-02-01 12:24:26 UTC
README
此包提供启用 @MultiParamConverter。它与 @paramConvert 注解 类似,但具有以下附加功能
- 您可以在一个操作中添加多个转换器。
- 您可以自定义 slug 名称。
- 您可以自定义获取 slug 的实体方法。
安装
安装只需几个简单的步骤。
步骤 1:将包添加到您的 composer.json
如果您还不熟悉 Composer,请参阅 https://getcomposer.org.cn。在您的 composer.json 中添加 MultiParamBundle
{ "require": { "noxlogic/multiparam-bundle": "2.1.*" } }
警告
如果您使用 Symfony 2.0,则 require 值应为 2.0.*
现在运行命令来告诉 composer 下载包
php composer.phar update noxlogic/multiparam-bundle
步骤 2:启用包
在 kernel 中启用包
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new NoxLogic\Bundle\MultiParamBundle\NoxLogicMultiParamBundle(), ); }
步骤 3:为 MultiParamBundle 添加 use 语句
在任何使用 MultiParamConverter 的控制器中添加此 use 语句
use NoxLogic\Bundle\MultiParamBundle\Configuration\MultiParamConverter;
这就完成了。现在您应该可以按照下面的示例实现转换器。当然,您需要一些实体才能使其工作。
功能
多个转换器
此转换器的主要功能是允许每个操作启用多个转换器。标准的 @paramConvert 只允许转换一个变量,而此转换器可以完成多个转换。
/**
* @route("/acme/category/{category_id}/article/{article_id}")
*
* @multiParamConverter("category", class="AcmeBundle:Category")
* @multiParamConverter("article", class="AcmeBundle:Article")
*/
public function showAction(Category $category, Article $article) { ... }
自定义 slug 名称
由于存在多个可能的转换器,仅使用 "id" 作为 slug 将不会工作。multiParamConverter 将查找变量名称并检查是否存在名为 "_id" 的 slug。如果该 slug 不可用,则默认使用 "id" slug。
如果您需要另一个名称,可以在选项中提供此名称。
/**
* @route("/acme/country/{iso3}/airport/{iatacode}")
*
* @multiParamConverter("airport", class="AcmeBundle:Airport", options={"id = "iatacode"})
* @multiParamConverter("country", class="AcmeBundle:Country", options={"id = "iso3"})
*/
public function showAction(Country $country, Airport $airport) { ... }
自定义实体获取方法
从除主键之外的其他内容获取实体是可能的。当没有提供额外选项时,这是默认行为,但也可以通过其他属性查找实体。
/**
* @route("/acme/country/{iso3}/airport/{iatacode}")
*
* @multiParamConverter("airport", class="AcmeBundle:Airport", options={"id = "iatacode", "method" = "findOneByIataCode"})
* @multiParamConverter("country", class="AcmeBundle:Country", options={"id = "iso3", "method" = "findOneByIso3Code"})
*/
public function showAction(Country $country, Airport $airport) { ... }
自定义实体管理器
如果您有多个实体管理器并且希望使用非默认的实体管理器,可以通过提供 'entity_manager' 选项来更改使用的管理器。
/**
* @route("/acme/{post_id}")
* @multiParamConverter("post", class="AcmeBundle:Post", options = {"entity_manager" = "foo"})
*/
public function showAction(Post $post) {
与默认的 paramConverter 一样,如果您使用类型提示并且只需要使用默认选项,则可以完全省略 @MultiParamConverter 注解。这两个示例是相同的。
/**
* @route("/acme/{post_id}")
* @multiParamConverter("post", class="AcmeBundle:Post")
*/
public function showAction(Post $post) {
/**
* @route("/acme/{post_id}")
*/
public function showAction(Post $post) {
更多信息
在此转换器的官方网站上了解更多相关信息,如有问题或/或错误(修复),请随时联系我!PR(Pull Request)总是受欢迎的!
特别感谢CruiseTravel,为该转换器最初编写并允许开源代码。