Laravel 5 - link_to_route()方法使我的路由参数通过添加"?"最后


Laravel 5 - link_to_route() method making my route parameters to change into Query String by adding "?" at the end

经过几个小时的搜索,我仍然找不到关于L5的答案。

我的问题是:

我想创建一个像这样的链接:

localhost:800/songs/you-drive-me-crazy

但是得到的是:

localhost:800/songs?you-drive-me-crazy

我的路由参数正在变成查询字符串。

//routes.php

$router->bind('songs', function($slug)
{
return App'Song::where('slug', $slug)->first();
});

$router->get('songs', ['as' => 'songs.index', 'uses' =>    'SongsController@index'] );
$router->get('songs/{songs}', ['as' => 'songs.show', 'uses' => 'SongsController@show'] );

我正在使用:

{!! link_to_route('songs.index', $song->title, [$song->slug])  !!}

我什么都试过了,但都不成功,你的建议也许会有帮助。

谢谢。

您使用的link_to_route不正确:

{!! link_to_route('songs.index', [$song->title, $song->slug])  !!}

第一个参数是路由名称,第二个参数是路由参数数组,最好使用键值。因为您没有显示您定义的路由,所以很难猜测这个关联数组应该是什么样子:

{!! link_to_route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug])  !!}

我还建议您使用文档中的函数:route(),参见:http://laravel.com/docs/5.0/helpers#urls

使用route():

正确请求的路由
{!! route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug])  !!}
一个正确格式化的路由应该是:
Route::get('songs/{title}/{slug}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);

这将产生如下URL: http://localhost:800/songs/you-drive-me-crazy/slug

如果你只想在URL中添加标题,而不想添加符号,可以使用这样的路由:

Route::get('songs/{title}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);

这将产生如下URL: http://localhost:800/songs/you-drive-me-crazy/?slug=slug

使用

Route::get('songs/{slug}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);

URL将是这样的:http://localhost:800/songs/you-drive-me-crazy/?title=title假设段塞现在是you-drive-me-crazy

route()呼叫中添加的任何参数,如果在路由定义中不存在,则将作为GET参数添加。

修复了,谢谢你的关心和建议。

我链接到错误的路径:

`{!! link_to_route('songs.index', $song->title, [$song->slug])  !!}`

现在,我把它改成:

`{!! link_to_route('songs.show', $song->title, [$song->slug])  !!}`