Laravel 5.1 在 url 中添加查询字符串

Posted

技术标签:

【中文标题】Laravel 5.1 在 url 中添加查询字符串【英文标题】:Laravel 5.1 add Query strings in url 【发布时间】:2016-02-17 16:24:04 【问题描述】:

我已经声明了这条路线:

Route::get('category/idquerysortOrder',['as'=>'sorting','uses'=>'CategoryController@searchByField'])->where(['id'=>'[0-9]+','query'=>'price|recent','sortOrder'=>'asc|desc']);

我想在 url 中得到这个:http://category/1?field=recent&order=desc 如何做到这一点?

【问题讨论】:

【参考方案1】:

如果你在 url 中有其他参数,你可以使用;

request()->fullUrlWithQuery(["sort"=>"desc"])

【讨论】:

黄金答案!谢谢【参考方案2】:

不应在您的路由中定义查询字符串,因为查询字符串不是 URI 的一部分。

要访问查询字符串,您应该使用请求对象。 $request->query() 将返回一个包含所有查询参数的数组。您也可以使用它来返回单个查询参数$request->query('key')

class MyController extends Controller

    public function getAction(\Illuminate\Http\Request $request)
    
        dd($request->query());
    

那么你的路线就是这样

Route::get('/category/id');

为 cmets 编辑:

要生成 URL,您仍然可以使用 Laravel 中的 URL 生成器,只需提供您希望使用 URL 生成的查询参数数组。

url('route', ['query' => 'recent', 'order' => 'desc']);

【讨论】:

好的。那么,从我的角度来看,我该如何称呼它? 您的选择是在您的控制器中设置变量并将它们正常传递到您的视图中(我建议您这样做,因为您可以随后验证它们。记住它们是用户输入!)。或者你可以直接在你的视图中使用外观Request::query() 问题是我在做<a href=url('route_url'></a> 这个。我想现在我做不到。 你应该仍然可以这样做,我已经用一个使用查询字符串生成 URL 的示例更新了我的答案 嗯,差点想通了。现在,唯一的问题是我已经声明了一个路由 category/id','CategoryController@index'!! link_to_action('CategoryController@customQuery',null,['id'=>1,'query'=>'price','order'=>'desc]) !! 转到索引方法而不是转到 customQuery 方法【参考方案3】:
Route::get('category/id/query/sortOrder', [
    'as' => 'sorting',
    'uses' => 'CategoryController@searchByField'
])->where([
    'id' => '[0-9]+',
    'query' => 'price|recent',
    'sortOrder' => 'asc|desc'
]);

您的网址应如下所示:http://category/1/recent/asc。您还需要在public 目录中有一个正确的.htaccess 文件。如果没有.htaccess 文件,您的网址应该类似于http://category/?q=1/recent/asc。但我不确定$_GET 参数(?q=)。

【讨论】:

你误解了我的问题。我明白你在说什么。但我想用查询字符串来做到这一点。

以上是关于Laravel 5.1 在 url 中添加查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 两次预先添加基本 URL

在 Laravel 5.1 中使用 Blade 访问嵌套 URL

在 Laravel 5.1 分页中使用漂亮的 URL

在 laravel 5.1 中无法获取 SQL 查询

带有查询字符串的 Laravel 路由 url

在 laravel 5.1 中获取 fullUrl