【问题标题】:How to route GET and POST for same pattern in Laravel?如何在 Laravel 中为相同的模式路由 GET 和 POST?
【发布时间】:2013-08-21 23:19:21
【问题描述】:

有没有人知道 Laravel 4 中有什么方法可以将这两行合二为一?

Route::get('login', 'AuthController@getLogin');
Route::post('login', 'AuthController@postLogin');

因此,不必同时编写两者,您只需编写一个,因为它们都使用“相同”方法,而且 URL 仍为 site.com/login 而不是重定向到 site.com/auth/login?

我很好奇,因为我记得 CI 有类似的东西,其中 URL 保持不变并且控制器从未显示:

$route['(method1|method2)'] = 'controller/$1';

【问题讨论】:

    标签: php laravel laravel-routing


    【解决方案1】:

    您可以使用以下方式组合路由的所有 HTTP 动词:

    Route::any('login', 'AuthController@login');
    

    这将匹配GET 和POST HTTP 动词。它还将匹配PUT、PATCH 和DELETE。

    【讨论】:

    • 如何检查动词是GET 还是POST?
    • 您始终可以使用$_SERVER['REQUEST_METHOD'] === 'POST',但我不建议将一个动作两个逻辑混合在一起......控制器的想法是分离逻辑结合后重定向获取模式。花 2 或 3 分钟阅读此特定主题:github.com/laravel/laravel/pull/1517。
    • @enchance ,你可以用if (Request::isMethod('post')){//...}检查是GET还是POST
    【解决方案2】:

    对,我是用手机回答的,所以我没有测试过(如果我没记错的话,文档中也没有)。如下:

    Route::match('(GET|POST)', 'login',
        'AuthController@login'
    );
    

    这应该可以解决问题。如果不是,那么泰勒将其从核心中移除;这意味着没有人在使用它。

    【讨论】:

      【解决方案3】:
      Route::match(array('GET', 'POST', 'PUT'), "/", array(
          'uses' => 'Controller@index',
          'as' => 'index'
      ));
      

      【讨论】:

        【解决方案4】:

        文档说...

        Route::match(array('GET', 'POST'), '/', function()
        {
            return 'Hello World';
        });
        

        来源:http://laravel.com/docs/routing

        【讨论】:

        • 这个答案比较准确。
        • 很抱歉,这怎么能得到这么多赞?是的,它解释了您如何同时使用 GET 和 POST,但没有说明如何根据请求类型调用不同的方法。
        【解决方案5】:
        Route::any('login', 'AuthController@login');
        

        在控制器中:

        if (Request::isMethod('post'))
        {
        // ... this is POST method
        }
        if (Request::isMethod('get'))
        {
        // ... this is GET method
        }
        ...
        

        【讨论】:

        • 这是一个更好的答案。谢谢
        【解决方案6】:

        请看下面的代码。

        Route::match(array('GET','POST'),'login', 'AuthController@login');
        

        【讨论】:

        • 正确回答问题的唯一答案。
        【解决方案7】:

        您可以尝试以下方法:

        Route::controller('login','AuthController');
        

        然后在你的AuthController class 中实现这些方法:

        public function getIndex();
        public function postIndex();
        

        它应该工作;)

        【解决方案8】:

        在 laravel 5.1 中,这可以通过隐式控制器来实现。 查看我从 laravel 文档中找到的内容

        Route::controller('users', 'UserController');
        

        接下来,只需将方法添加到您的控制器。方法名称应以它们响应的 HTTP 动词开头,后跟 URI 的标题大小写版本:

        <?php
        
        namespace App\Http\Controllers;
        
        class UserController extends Controller
        {
            /**
             * Responds to requests to GET /users
             */
            public function getIndex()
            {
                //
            }
        
            /**
             * Responds to requests to GET /users/show/1
             */
            public function getShow($id)
            {
                //
            }
        
            /**
             * Responds to requests to GET /users/admin-profile
             */
            public function getAdminProfile()
            {
                //
            }
        
            /**
             * Responds to requests to POST /users/profile
             */
            public function postProfile()
            {
                //
            }
        }
        

        【讨论】:

          【解决方案9】:

          根据最新的文档,应该是

          Route::match(['get', 'post'], '/', function () {
              //
          });
          

          https://laravel.com/docs/routing

          【讨论】:

            【解决方案10】:

            在路线中

            Route::match(array('GET','POST'),'/login', 'AuthController@getLogin');
            

            在控制器中

            public function login(Request $request){
                $input = $request->all();
                if($input){
                 //Do with your post parameters
                }
                return view('login');
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-04-20
              • 2015-05-28
              • 2013-09-17
              • 1970-01-01
              • 2013-11-08
              • 2016-04-21
              • 2017-11-11
              相关资源
              最近更新 更多