【问题标题】:How to singularize route path part using FOSRestBundle如何使用 FOSRestBundle 单一化路由路径部分
【发布时间】:2016-05-04 13:44:56
【问题描述】:

我有这个控制器(这里是一个 sn-p)

/**
 * Class UserController
 * @package Belka\AuthBundle\Controller
 */
class UserController extends FOSRestController implements ClassResourceInterface
{
    /**
     * @View()
     *
     * @Route(requirements={"user"="\w+"})
     * @ParamConverter("user", converter="fos_rest.request_body")
     */
    public function postGlobaltokenAction(User $user)
    {
        ...
    }

自动生成路由:

  post_user_globaltoken      POST     ANY      ANY    /api/users/{user}/globaltokens.{_format}  

这没关系,除了我想将“globaltoken”单数化。那可能吗?我找不到任何注释来调整它。我应该在route.yml 中对路线进行硬编码吗?

【问题讨论】:

    标签: rest symfony fosrestbundle symfony-2.8


    【解决方案1】:

    我找到了两种方法:

    使用个人Inflector

    正如Symfony's documentation 建议的那样,您可以注册一个个人Inflector,它始终以单数形式返回“globaltoken”,而所有其他资源将是复数形式:

    use Doctrine\Common\Util\Inflector;
    use FOS\RestBundle\Util\Inflector\DoctrineInflector;
    use FOS\RestBundle\Util\Inflector\InflectorInterface;
    
    /**
     * Inflector class
     *
     */
    class NoopInflector extends DoctrineInflector implements InflectorInterface
    {
        public function pluralize($word)
        {
            if($word == "globaltoken")
                return $word;
    
            return parent::pluralize($word);
        }
    }
    

    services.yml:

    services:
        belka.auth_bundle.util.inflector:
          class: Belka\AuthBundle\Util\NoopInflector
    

    但我发现这种方式有点脏,因为我将来可能需要复数形式。

    覆盖 FOSRestBundle 自动生成的路由

    就这么简单!只需在正确的方法上添加@Route 注释即可!

    /**
     * @View()
     *
     * @Route("/users/{user}/globaltoken", defaults={"_format" = "json"}, requirements={"user"="\w+"})
     *
     * @ParamConverter("user", converter="fos_rest.request_body")
     */
    public function postAction(User $user)
    {
    }
    

    现在如果我打电话给php app/console debug:route,我会得到我想要的:

    post_user_globaltoken      POST     ANY      ANY    /api/users/{user}/globaltoken.{_format} 
    

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 2013-02-22
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多