【问题标题】:In Laravel, how can I get *only* POST parameters?在 Laravel 中,如何获取 *only* POST 参数?
【发布时间】:2015-02-06 14:17:27
【问题描述】:

我知道在 Laravel 中可以使用 $request->get('my_param')Input::get('my_param') 获取 POST 或 GET 请求参数(我现在正在玩 v5/dev 版本,但 4.2 也是如此)。

但我如何确保我的 my_param 来自 POST 参数,而不仅仅是来自附加到 URL 的 ?my_param=42(除了恢复到原来的 $_POST$_GET superglobals 并把可测试性抛到了窗外)

(注意:我也知道Request::get 方法会给我一个 POST 请求的 POST 参数,如果两个具有相同名称的 POST 和 URL/GET 参数都存在,但是......但是如果参数土地相反,通过 url 查询字符串,我想要一种 Laravel 惯用的方式来了解这一点)

【问题讨论】:

    标签: php laravel http-post laravel-request


    【解决方案1】:

    Illuminate\Http\Request 类(或者实际上是它从Symfony\Component\HttpFoundation\Request 扩展的 Symphony 类)中,有两个存储请求参数的类变量。

    public $query - 用于 GET 参数

    public $request - 用于 POST 参数

    两者都是Symfony\Component\HttpFoundation\ParameterBag 的实例,它实现了get 方法。

    这是你可以做的(虽然不是很漂亮)

    $request = Request::instance();
    $request->request->get('my_param');
    

    【讨论】:

    • 谢谢,这正是我所需要的!
    • 或者你可以使用这个语法:$request = Input::instance()->request->get('my_param'); 同样的事情,只是说
    • $request->post() 或 Request::post()
    【解决方案2】:

    当您可以轻松完成所需的事情时,为什么还要尝试使事情复杂化:

    $posted = $_POST;
    

    【讨论】:

    • 1.不适合单元/验收测试。 2. 不适合依赖于 Illuminate\Http\Request 的组件(即,如果您将 ReactPHP 适配器用于 Laravel/Lumen)。
    • 尽可能不要直接访问 $_GET 或 $_POST 字段,因为它们可能包含未转义的数据。
    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2017-08-23
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多