繁体   English   中英

如何使用Laravel的URL生成器帮助器生成的URL不在结尾处?

[英]How to generate a url with Laravel's url generator helper with parameters that are not at the end?

通常,使用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%同意以通常命名的路线为路。

尝试这个:

url(sprintf("foo/%d/bar/%d/show", 333, 444)); 

我更喜欢这种方法,而不是在不同页面上对URL进行硬编码。

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;
}

//假设您在控制器中传递了参数

{{ route('someRoute') }}

// 如果不

{{ route('someRoute', ['param1' => 'test', 'param2' => 'routing']) }}

如果您命名路线,则可以使用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

如果参数不是GET请求参数,而是中点路径的一部分(就像在一个问题中确切提出的那样),则可以使用Laravel的url()帮助器来生成url,而无需使用sprintf()

url('foo', [333, 'bar', 444, 'show']);
// site.com/foo/333/bar/444/show

但是,正如其他答案所指出的那样,首选路由

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM