Laravel 5.1 带有问号的路由

Posted

技术标签:

【中文标题】Laravel 5.1 带有问号的路由【英文标题】:Laravel 5.1 Routes that have question mark 【发布时间】:2016-02-14 14:54:16 【问题描述】:

我正在尝试在 Laravel 5.1 中创建一个基于“关键字”搜索记录的路由。我喜欢在我的网址中包含? 以提高可读性。问题是,当我包含? 并使用邮递员测试路线时,它什么也不返回。但是当我删除? 并用/ 替换它并再次用邮递员测试它时,它将返回关键字的值。 Laravel 路由是否支持?

//Routes.php
Route::get('/search?keyword=keyword', [
    'as' => 'getAllSearchPublications', 
    'uses' => 'PublicationController@index'
]);

//Publication Controller
public function index($keyword)

    return $keyword;

我已经在互联网上搜索了几个小时,并且我已经阅读了 Laravel 文档,但我找不到答案。谢谢。

【问题讨论】:

我需要满足与发送参数的旧 API 调用的通信。例如。 /customer/?id=1 不知道该怎么做。你有没有让它工作? 【参考方案1】:

我相信您在谈论查询字符串。要接受查询参数,不要将其作为参数传递。因此,例如,您的路线应该看起来更简单,如下所示:

Route::get('/search', [
    'as' => 'getAllSearchPublications', 
    'uses' => 'PublicationController@index'
]);

注意:我删除了?keyword=keyword

然后,在您的控制器方法中,您可以通过在您的 Request 对象上调用 query 方法来获取查询参数。

public function index(Request $request)

    return $request->query('keyword');

如果您还没有,则需要导入 use Illuminate\Http\Request; 以使用 Request 类。

【讨论】:

那么这个“as”是什么?它的用途是什么?这个“getAllSearchPublication”是什么?这个“关键词”是什么?我有一个 domain.com/something/?myquerystring 我需要得到那个 myquerystring。这是使用带问号的 domain/oembed/?something 的 oembed 约定【参考方案2】:

使用

$resquest

控制器操作中的参数以获取查询参数。而不是使用"?" 在您的路线中创建。

【讨论】:

感谢您的回复。不过,Thomas Kim 的回答更详细。

以上是关于Laravel 5.1 带有问号的路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 通配符路由

Laravel 5.1的多路由文件的配置

Laravel 5.1 找不到路由对象

Laravel 5.1 UrlGenerator 路由未定义错误

在 Ajax 调用中传递完整 URL 作为参数 - Laravel 5.1 路由

相同的路由但在 Laravel 5.1 路由中调用不同的控制器