【问题标题】:Check if request is GET or POST检查请求是 GET 还是 POST
【发布时间】:2014-01-30 14:56:16
【问题描述】:

在我的控制器/动作中:

if(!empty($_POST))
{
    if(Auth::attempt(Input::get('data')))
    {
        return Redirect::intended();
    }
    else
    {
        Session::flash('error_message','');
    }
}

Laravel中是否有方法可以检查请求是POST还是GET

【问题讨论】:

    标签: php post get laravel-4


    【解决方案1】:

    根据Laravels docs,有一个Request方法可以检查它,所以你可以这样做:

    $method = Request::method();
    

    if (Request::isMethod('post'))
    {
    // 
    }
    

    【讨论】:

      【解决方案2】:

      上述解决方案已过时。

      根据Laravel documentation

      $method = $request->method();
      
      if ($request->isMethod('post')) {
          //
      }
      

      【讨论】:

      • Undefined variable: request
      • 这适用于您将请求传递给函数的情况,例如function myFunction (Request $request, $otherParams) { if($request->method == 'get') {} }
      • 或者只是在任何地方使用request()->isMethod('post'),因为函数request()在Laravel全局注册。
      【解决方案3】:

      我已经在 laravel 版本中解决了如下问题:7+

      **In routes/web.php:**
      Route::post('url', YourController@yourMethod);
      
      **In app/Http/Controllers:**
      public function yourMethod(Request $request) {
          switch ($request->method()) {
              case 'POST':
                  // do anything in 'post request';
                  break;
      
              case 'GET':
                  // do anything in 'get request';
                  break;
      
              default:
                  // invalid request
                  break;
          }
      }
      

      【讨论】:

        【解决方案4】:

        当然有一种方法可以找出请求的类型,But 而你应该定义一个处理POST 请求的路由,因此你不需要条件语句.

        routes.php

        Route::post('url', YourController@yourPostMethod);
        

        在你的控制器/动作中

        if(Auth::attempt(Input::get('data')))
        {
           return Redirect::intended();
        }
        //You don't need else since you return.
        Session::flash('error_message','');
        

        GET 请求也是如此。

        Route::get('url', YourController@yourGetMethod);
        

        【讨论】:

        • 下面汤姆的解决方案(未选)更好
        • @Krynble 你否决了我的回答,因为它是错误的还是因为它不是最好的?
        • 只是因为我相信它没有回答问题;你说的有道理,但对于非常简单的任务(以及添加服务器端验证时),我相信最好在单个控制器方法中处理。
        • @Krynble 你如何实现你的单一控制器方法Route::any()
        • 是的,我使用 Route::any() 并在控制器方法中处理所有内容;包括验证和在需要时显示输入的表单信息。
        【解决方案5】:

        使用Request::getMethod() 来获取当前请求所使用的方法,但这应该很少需要,因为 Laravel 会根据请求类型调用控制器的正确方法(例如,getFoo() 用于 GET,postFoo() 用于 POST) .

        【讨论】:

        • Laravel 3 中的 is_postis_get 不就是因为 Laravel 4 使用 camelCase 吗?
        • 对 GET 和 POST 使用单独的方法可能是不可取的。对于简单的 CRUD 用例,对 GET 或 POST 使用相同的方法可以减少代码重复并降低开发的心理负担。
        【解决方案6】:

        $_SERVER['REQUEST_METHOD'] 用于此目的。

        它返回以下之一:

        • '获取'
        • '头'
        • 'POST'
        • 'PUT'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-25
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          • 2017-10-30
          • 2019-08-23
          • 2015-07-01
          相关资源
          最近更新 更多