我有这个控制器(这里是一个片段)
/**
* 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
?
答案 0 :(得分:1)
我找到了两种方法:
使用个人Inflector
如Symfony's documentation所示,您可以注册一个返回" globaltoken"的个人Inflector
。永远是单数,而所有其他资源将是多元化的:
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}