如何使用 FOSRestBundle 对路由路径部分进行单数化
How to singularize route path part using FOSRestBundle
我有这个控制器(这里是一个片段)
/**
* 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
中对路线进行硬编码吗?
我找到了两种方法:
使用个人 Inflector
正如Symfony's documentation建议的那样,您可以注册一个个人 Inflector
其中 returns "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}
我有这个控制器(这里是一个片段)
/**
* 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
中对路线进行硬编码吗?
我找到了两种方法:
使用个人 Inflector
正如Symfony's documentation建议的那样,您可以注册一个个人 Inflector
其中 returns "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}