如何在laravel 5.4中传递带路由的查询字符串

时间:2017-07-26 08:09:33

标签: query-string laravel-5.4 laravel-routing

我正在使用Laravel 5.4。我想使用如下的查询字符串:

tempsite.com/lessons?id=23

了解如何修改路线。可以通过以下方式提供路线。

Route::get('lessons/id={id}', ['as' => 'lessons.index', 'uses' => 'Lessons\LessonController@index']);

但是加上'?'不适合我。请尽快帮助我们提供解决方案。

4 个答案:

答案 0 :(得分:0)

如果您使用的是资源丰富的控制器,那么您的所有路径都将为您处理,因此您只需添加

即可
Route::resource('lessons', 'Lessons\LessonController');

然后,您可以使用路由模型绑定来绑定与该特定ID匹配的模型实例。

Route::model('lesson', Lesson::class);

这将在您的RouteServiceProvider中完成。

我还建议您仔细阅读laravel网站https://laravel.com/docs/5.4/routing上的以下文档。它提供了对路线如何工作以及如何构建路线的真正了解。

答案 1 :(得分:0)

而不是tempsite.com/lessons?id=23 传递它像tempsite.com/lessons/23 并在路线

Route::get('lessons/{id}', ['as' => 'lessons.index', 'uses' => 'Lessons\LessonController@index']);

获取控制器中的id,编写像这样的函数

public function index($id)
{
    //do anything with $id from here
}

答案 2 :(得分:0)

无需在路由中定义查询字符串参数。您可以在控制器中返回查询字符串参数,如下所示:

网址示例:tempsite.com/lessons?id=23

public function lessons(Request $request)
{
    $request->get('id'); // Using injection
    Request::get('id'); // Using the request facade
    request()->get('id'); // Using the helper function
}

您甚至可以验证参数:

public function lessons(Request $request)
{
    $this->validate($request, ['id' => 'required|integer']);
}

注意:如果您想在省略ID时无法访问该网址,请参阅@DarkseidNG answer。

答案 3 :(得分:0)

我可以通过在网址上加上正斜杠来告知laravel在我的路线上接受查询字符串请求,

 // web.php
 Route::get('/path/', "Controller@action");

使用上述方法,mysite/path?foo=bar&name=john不会引发404错误。