【发布时间】:2015-04-17 12:14:14
【问题描述】:
我知道有人讨论了在 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 一起使用的方式吗?
【问题讨论】:
-
尝试直接在路由注解中指定方法(methods="GET|POST")
-
谢谢,这正是我希望得到的 :) 只需将其作为单独的答案发布,这样我就可以勾选这个 :)
标签: php symfony controller annotations http-protocols