2

Symfony2 でルートを処理するためのベスト プラクティス (routing.yml と注釈) についての議論があることは知っています。注釈を使用して、現状を維持したいということを述べさせてください。

コントローラーで単一のアクションに対して複数のルートを定義すると、@Methodアノテーションの最後の定義が他のすべての定義をオーバーライドするように見えるため、次のエラーが発生します。

No route found for "POST /index": Method Not Allowed (Allow: GET, HEAD)

これは、私が使用しているコードのほんの一部です。

namespace MySelf\MyBundle\Controller;

use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

class MyController extends Controller{

    /**
     * @Route(
     *     "/index",
     *     name="index_default"
     * )
     * @Method({"GET", "POST"})
     *
     * @Route(
     *     "/index/{id}",
     *     name="index",
     *     requirements={
     *          "id": "\d+"
     *     }
     * )
     * @Method({"GET"})
     *
     * @return Response
     */
     public function indexAction($id = null){
          /*DO SOME FANCY STUFF*/
          ...
          return $response;
     }
}

これは非常にうまく機能していますが!

index_default:
    pattern: /index
    defaults: { _controller: MyBundle:MyController:index }
    requirements:
      _method: GET|POST

index:
    pattern: /index/{id}
    defaults: { _controller: MyBundle:MyController:index }
    requirements:
      _method: GET
      id: \d+

代わりに注釈を使用して、routing.yml で動作するように実装するアイデアはありますか?

4

2 に答える 2