【问题标题】:Request::query('sort_by') always returns null in view on Laravel 5.3Request::query('sort_by') 在 Laravel 5.3 的视图中总是返回 null
【发布时间】:2017-01-20 01:49:01
【问题描述】:

在我的开发机器中使用Request class ⁠⁠⁠⁠,在查看查询参数时遇到了一个非常奇怪的问题⁠⁠⁠

⁠⁠⁠⁠Request::query('sort_by')⁠⁠⁠⁠ 它返回 ⁠⁠⁠⁠⁠实际 价值⁠⁠⁠⁠⁠

⁠⁠(DevEnv: ⁠⁠⁠MacOS PHP 7.0⁠⁠⁠ Laravel Valet 2)⁠⁠ 但是⁠⁠⁠

在生产中⁠⁠⁠它总是返回⁠⁠⁠⁠null⁠⁠⁠⁠

⁠⁠(ProdEnv: ⁠⁠⁠Ubuntu 16.04 PHP 7.0⁠⁠⁠ NGINX)⁠⁠

我已经在浏览器的 URL 中有这个字符串

【问题讨论】:

  • 你能告诉我们请求的网址吗?
  • 可以发一些代码或方法吗?
  • 在我看来我有这个代码 {{ Request::query('sort_by')⁠⁠⁠⁠}}
  • 你找到答案了吗?

标签: php laravel nginx laravel-5.3 ubuntu-16.04


【解决方案1】:

我不确定你的代码是否可以使用

$collection=collect(⁠⁠⁠⁠Request::all());
$data=$collection->sortByDesc('yourfieldname');
OR
$data=$collection->sortBy('yourfieldname');

【讨论】:

  • 我可以在控制器中获取它但不在视图中
  • 在视图中在请求之前添加斜杠,例如\Request::all() 或 request()->all() 或将请求对象从控制器传递到视图
【解决方案2】:

你做错事了。在您的控制器中执行此操作。

public function yourController()
{
    list($sortBy, $order) = explode('-', request()->get('sort_by'));
    $sortedModel = YourModel::get()->orderBy($sortBy, $order);

    // $sortedModel contain the collection with desired sorting order
}

对于您当前的实现,这将是基本方法。

但我想建议使用路由作为

/new_arrivals?sortby=price&order=desc

所以在你的控制器中你不需要implode。你可以像这样分配参数

$sortBy = request()->get('sortby');
$order = request()->get('order');

然后你可以继续进行相同的操作。干净多了。 更多信息ordering grouping limit and offset

【讨论】:

  • 我没有做错,我已经在控制器上对其进行了排序,但鉴于我没有得到输入来显示最后一个过滤器选择是什么,它返回 null
【解决方案3】:

我发现 NGINX 配置 /server 块是罪魁祸首,需要一些修复,

所以我把它改成了这个,我得到了查询参数

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 2022-01-27
    • 2022-06-15
    • 2016-11-08
    • 2017-05-24
    • 2018-03-08
    • 1970-01-01
    • 2018-04-21
    • 2019-08-11
    相关资源
    最近更新 更多