通常使用Laravel url
辅助方法添加参数非常简单 - 只需:
url("foo/show/", [333]); // site.com/foo/show/333
但是,当参数处于中点时,如何执行此操作,例如:
url("foo/?/bar/?/show", [333,444]);
我尝试了以下所有失败(虽然有些人接近):
url("foo/?/bar/?/show", [333,444]);
// site.com/foo//333/444?/bar/?/show
url("foo/{a}/bar/{b}/show", [333,444]);
// site.com/foo/{a}/bar/{b}/show/333/444
url("foo/{a}/bar/{b}/show", ['a' => 333, 'b' => 444]);
// site.com/foo/{a}/bar/{b}/show/333/444
?
显然很重要,因为它接近结果......
我特别谈到未命名的路线。因此route
函数不存在问题。在当前项目中,命名路由是不可能的,所以我需要重申我正在寻找url
方法的使用。
我100%同意通常命名的路线是要走的路。
答案 0 :(得分:3)
试试这个:
url(sprintf("foo/%d/bar/%d/show", 333, 444));
答案 1 :(得分:1)
我更喜欢这种方法,而不是在不同页面上硬编码网址。
Route::get('foo/{param1}/bar/{param2}/show', array('as' => 'someRoute', 'uses' => 'SomeController@someMethod'))
->where(array(
'param1' => '[a-zA-Z0-9-]+',
'param2' => '[a-zA-Z0-9-]+'
));
控制器:
public function someMethod($param1, $param2)
{
return $param1 . $param2;
}
//假设你在控制器中传递了params
{{ route('someRoute') }}
//如果不是
{{ route('someRoute', ['param1' => 'test', 'param2' => 'routing']) }}
答案 2 :(得分:0)
如果您为路线命名,则可以使用route
功能。
Route::get('some/{test}/{a}/testing', ['as' => 'testRoute', 'uses' => 'SomeController@someMethod']);
Route::get('test', function() {
echo route('testRoute', ['test' => 'green', 'a' => 'purple']);
});
这会输出http://yourapp.local/some/green/purple/testing
答案 3 :(得分:0)
如果参数不是GET
请求参数,而是中间点的路径部分(如问题中的确切询问),则可以使用Laravel's url()
helper生成网址而不使用{{1}总之:
sprintf()
但是,正如其他答案所指出的那样 - named routes更可取。