我不清楚如何在Symfony中处理异常MethodNotAllowedException。 让我解释一下,
假设我们在View上编写此脚本以转到Controller:
//Script on view to go to the controller
<script type="text/javascript">
$.ajax({
method: "POST",
url: "{{ path('my_path') }}",
data: { myValue }
}).done(function( data ) {
//do something
});
</script>
我们使用post方法定义数据发送。现在,在 routing.yml
中查看路线//scr/myBundle/Resources/routing.yml
my_path:
path: /my-path
defaults: { _controller: myBundle:myMain:doAndReturnSomething }
methods: [POST]
现在,在控制器中
//scr/myBundle/Resources/Controller/myMainController
class myMainController extends Controller{
public function doAndReturnSomethingAction()
{
//doSomeThing
return $this->render('myBundle:myViews:view.html.twig');
}
这很有效。我们怎么看,定义发送的方法是POST。
现在,当我们使用浏览器重新加载页面或按f5时。一切正常。 但是,如果我们按下浏览器中的URL
//Click on: localhost/myAplicationDir/web/my-path
应用程序被破坏了,我想我们确定没有用GET定义发送。
如何在Symfony中获取此异常并向用户显示自定义页面?
我正在考虑重定向到myBundle索引页面。什么sugest?
感谢您的帮助。 我刚开始使用PHP和Symfony。
分别使用GET和POST方法创建两个单独的路由器
我不想创建两条独立的路线。我的控制器有很多方法。 我不想通过URL通过GET发送数据。但我不希望我的申请被破坏。
//scr/myBundle/Resources/routing.yml
my_path:
path: /my-path
defaults: { _controller: myBundle:myMain:doAndReturnSomething }
methods: [POST, GET]
//scr/myBundle/Resources/Controller/myMainController
use Symfony\Component\HttpFoundation\Request;
class myMainController extends Controller{
public function doAndReturnSomethingAction(Request $request)
{
if ($request->getMethod() == 'POST')
//doSomeThing
else
//redirect to index
//This can be other way
//myValue is sending via POST
if ($request->get('myValue') != null)
//doSomething
else
//redirect to index
//return $this->render('myBundle:myViews:view.html.twig');
}
在routing.yml ??
的所有路由中都有任何方法可以解决这个问题答案 0 :(得分:1)
您需要在路线上启用GET
,以便按此工作。
//scr/myBundle/Resources/routing.yml
my_path:
path: /my-path
defaults: { _controller: myBundle:myMain:doAndReturnSomething }
methods: [POST, GET]
虽然我不一定会推荐这个,但建议使用两个单独的路由,并且如果绝对有必要将GET
从doAndReturnSomething
重定向到单独的Controller。基本上分别以doSomethingAction
和returnSomethingAction
结尾。