これ使うとコントローラーをかなり圧縮できる。
例)
namespace Hoge\FugaBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; // 例えばFOSRestBundleを道入してRestAPIを作成していたとする。 use FOS\RestBundle\Controller\Annotations\View; class PiyoController extends Controller { /** * @Route("/user/{id}.{_format}", name="hoge_fuga_piyo_show", defaults={"_format" = "json"}) * @View(serializerEnableMaxDepthChecks=true, serializerGroups={"piyoShow"}) * @ParamConverter("entity", class="HogeFugaBundle:User") * @Method("GET") */ public function showAction(User $entity) { return $entity; } }
見て分かる通り、URLよりIDを取得後対応するエンティティをjson文字列として返却するメソッドは上記の通り1行で済むようになる。
アノテーションでParamConverterを指定してやると、自動でDoctrineから習得したエンティティを注入してくれているのである。
基本的に指定がなければリポジトリのfind()メソッドにRouteアノテーションから受け取ったidを渡してエンティティ習得を試みてくれるが、リポジトリ内のメソッドを指定することも出来る
/** * @ParamConverter("entity", class="HogeFugaBundle:User", options={"repository_method"="customGet"}) */
といった具合である。
更に便利な機能もあるのであとは公式を参照されたし。
http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html
これはまじで便利。