2016-05-04 9 views
1

Ich habe diesen Controller (ein Ausschnitt hier)Wie Routenweg Teil vereinzeln FOSRestBundle mit

/** 
* 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) 
    { 
     ... 
    } 

, die die Route automatisch generiert:

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

, das ich außer der Tatsache, OK ist, wie "globaltoken" singularisiert. Ist das möglich? Ich kann keine Anmerkung finden, um das zu ändern. Sollte ich die Route in meiner route.yml fest codieren?

Antwort

1

ich zwei Möglichkeiten gefunden habe:

eine persönliche Inflector

Mit

als Symfony's documentation schon sagt, können Sie ein persönliches Inflector registrieren, die „globaltoken“ immer als singuläre, während alle anderen Ressourcen zurückkehrt wird werden pluralized:

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 

aber ich fand diesen Weg ein bisschen schmutzig, da ich die Pluralform in der Zukunft brauchen könnte.

Aufschalten die FOSRestBundle automatisch generierte Routen

es so einfach ist! Fügen Sie einfach die @Route Annotation auf den richtigen Methoden hinzu und Sie sind fertig!

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

Nun, wenn ich php app/console debug:route nenne ich bekommen, was ich will:

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