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 で動作するように実装するアイデアはありますか?