我尚不清楚如何处理Symfony中的异常方法。让我解释一下,
在视图上
假设我们将此脚本写在视图上,以转到控制器:
//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');
}
这很好。我们如何看待,定义为发送的方法是发布。
现在,当我们使用浏览器或按F5重新加载页面时。一切都很好。但是,如果我们按在浏览器上的URL中输入
//Click on: localhost/myAplicationDir/web/my-path
我想,
,我们不会定义get发送发送。如何在Symfony中获得此例外并向用户显示自定义页面?
我正在考虑重定向到mybundle索引页面。有什么sugest?
感谢您的帮助。我只是从PHP和Symfony开始。
解决方案
解决方案#1
分别使用GET和POST方法创建两个单独的路由器
解决方案#2
我不想创建两个单独的路由。我的控制器有许多方法。我不想通过URL发送数据。但是我不希望我的应用程序被打破。
//scr/myBundle/Resources/routing.yml
my_path:
path: /my-path
defaults: { _controller: myBundle:myMain:doAndReturnSomething }
methods: [POST, GET]
//scr/myBundle/Resources/Controller/myMainController
use SymfonyComponentHttpFoundationRequest;
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');
}
有任何方法可以在路由上的所有路由中对此进行更正。
您需要在路线上启用GET
,以便按照您的意愿工作。
//scr/myBundle/Resources/routing.yml
my_path:
path: /my-path
defaults: { _controller: myBundle:myMain:doAndReturnSomething }
methods: [POST, GET]
尽管我不一定建议这样做,而是建议使用两条单独的路线,如果绝对需要将GET
从doAndReturnSomething
重定向到单独的控制器。本质上分别以doSomethingAction
和returnSomethingAction
结束。