これ使うとコントローラーをかなり圧縮できる。
例)
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
これはまじで便利。