如何用Laravel的url生成器帮助器生成一个URL,参数不在最后?

时间:2016-01-06 15:17:58

标签: php laravel laravel-5

通常使用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%同意通常命名的路线是要走的路。

4 个答案:

答案 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更可取。