noxlogic/multiparam-bundle

此包已被 弃用 且不再维护。未建议替代包。

此包为 symfony2 项目提供 multiParamConverter 注解。

安装: 39

依赖者: 0

建议者: 0

安全性: 0

星标: 17

关注者: 5

分叉: 3

开放问题: 3

类型:symfony-bundle

2.1.0 2012-08-01 15:59 UTC

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,为该转换器最初编写并允许开源代码。