Laravel 5.1带问号的路由

9
我正在尝试在Laravel 5.1中创建一条路由,该路由将根据“关键字”搜索记录。我想在我的URL中包含一个?以增加可读性。但问题是,当我包含?并使用postman测试路由时,它返回空值。但是,当我将?替换为/并再次使用postman测试时,它将返回关键字的值。 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我无法弄清楚如何实现它。您解决了这个问题吗? - gcman105
2个回答

17

我相信你在谈论查询字符串。要接受查询参数,你不需要将其作为参数传递。因此,例如,您的路由应该看起来更加简单,像这样:

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类。

1
那么这个 "as" 是什么?它有什么作用?"getAllSearchPublication" 又是什么?"keywords" 又是什么?我有一个 domain.com/something/?myquerystring 的链接,我需要获取这个 myquerystring。这是使用 oembed 约定的方式,使用带问号的 domain/oembed/?something。 - Nils Riga

-1

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


感谢您的回复。尽管Thomas Kim的答案更详细。 - Abdullah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接