SYMFONY 3:处理异常方法NotloweredException



我尚不清楚如何处理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]

尽管我不一定建议这样做,而是建议使用两条单独的路线,如果绝对需要将GETdoAndReturnSomething重定向到单独的控制器。本质上分别以doSomethingActionreturnSomethingAction结束。

相关内容

最新更新