【问题标题】:Retrieving GET and POST data inside Laravel controller在 Laravel 控制器中检索 GET 和 POST 数据
【发布时间】:2013-09-16 16:18:58
【问题描述】:

我一直在网上搜索如何在控制器中获取 POST 数据,目前我找到了两种解决方案:Input::get()$_POST

Input::get() 的评论内容如下:

/**
 * Gets a "parameter" value.
 *
 * This method is mainly useful for libraries that want to provide some flexibility.
 *
 * Order of precedence: GET, PATH, POST
 *
 * Avoid using this method in controllers:
 *
 *  * slow
 *  * prefer to get from a "named" source
 *
 * It is better to explicitly get request parameters from the appropriate
 * public property instead (query, attributes, request).
 *
 * @param string  $key     the key
 * @param mixed   $default the default value
 * @param Boolean $deep    is parameter deep in multidimensional array
 *
 * @return mixed
 */

他们所指的这个“命名”来源是什么?我应该用什么来代替Input::get()

【问题讨论】:

  • 它们可能指的是 $_GET 或 $_POST,也就是说,如果您知道参数的来源,则无需先测试 GET 再测试 POST 参数。
  • Jan,你从哪里弄来的 cmets?
  • 注释来自 Laravel 4 使用的 Symfony 组件:Symfony/Component/HttpFoundation/Request.php
  • 请参阅“stackoverflow.com/questions/13240165/…”以获取答案。
  • @RobGordijn 我们如何获得$request 对象?

标签: php laravel http-post http-get


【解决方案1】:

documentation 表明您可以使用 Input::get() 检索任何 HTTP 动词的输入值。

$name = Input::get('name');

【讨论】:

  • 更明确一点 - 文档说:“您无需担心用于请求的 HTTP 动词,因为所有动词都以相同的方式访问输入。”这就是 Input::get() 方法。如果你需要区分动词,你可以为不同的动词使用不同的路由,或者使用 Request::isMethod('post') 来确定你是否正在处理一个 HTTP POST 请求。
  • 我个人不喜欢这种行为,我更喜欢只从 POST 请求的请求正文中获取输入,同样,只从 GET 请求的查询字符串中获取输入。我真的很喜欢使用Input::get,但是我扩展了 Laravel Request 类并覆盖了input 方法,这样它就不会将查询字符串参数添加到每个搜索集。这是一个非常简单的改变。扩展 Request 类在这里有很好的记录:laravel.com/docs/extending#request-extension
  • 要扩展 @Colin 的答案,请使用您自己的扩展 Laravel Request 类,如下所述:stackoverflow.com/a/30840179/517371 然后,在您的类中,从 Illuminate\Http\Request 复制 input() 方法并删除 ` + $this->query->all(). Bingo! Now in a POST request, Request::query()`返回查询(URL)参数,而Request::input()返回表单/multipart/JSON/任何参数。
  • 问题:“我应该用什么代替 Input::get()”回答:“Input::get()”?
【解决方案2】:

要获取所有输入,请使用Input::all() 方法。 要检查特定列是否存在,请使用Input::has('column_name') 例如Input::has('name')。 要检索列值,请使用 Input::get('column_name') 例如。 Input::get('name').

【讨论】:

    【解决方案3】:

    您可以使用 :-

    从 url 获取参数
    request()->urlParam;
    

    如果你想使用 GET 参数获取:-

    $request->get('current-password');
    

    如果你想使用 POST 参数:-

    $request->post('current-password');
    

    【讨论】:

      【解决方案4】:

      在现代 Laravel 安装中,如果你的控制器方法传递了一个 Request 的实例,那么 you can use that。例如,所有这些都是相同的:

      public function update(Request $request, Model $model) {
          $some_var = $_POST["some_var"];
          $some_var = $request->input("some_var");
          $some_var = $request->post("some_var");
          $some_var = $request->some_var;
      }
      

      如果您的方法没有传递当前Request 的实例,您可以使用the request() helper method 访问一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-13
        • 2016-04-21
        • 2017-10-03
        • 2020-09-13
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 2016-12-14
        相关资源
        最近更新 更多