经过几个小时的搜索,我仍无法找到关于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]) !!}
我已尝试过所有但尚未成功的建议,您的建议可能会有所帮助。
感谢。
答案 0 :(得分:11)
您对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']);
这会产生如下网址:http://localhost:800/songs/you-drive-me-crazy/slug
如果您只想将标题添加到URL而不是slug,请使用如下路线:
Route::get('songs/{title}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);
这会产生如下网址:http://localhost:800/songs/you-drive-me-crazy/?slug=slug
使用
Route::get('songs/{slug}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);
网址如下:http://localhost:800/songs/you-drive-me-crazy/?title=title
假设现在的slu is是you-drive-me-crazy
route()
调用中的任何添加参数都将作为GET参数添加,如果它在路由定义中不存在。
答案 1 :(得分:1)
修复它,感谢您的关注和建议。
我在这里链接到错误的路线:
`{!! link_to_route('songs.index', $song->title, [$song->slug]) !!}`
现在,我改为:
`{!! link_to_route('songs.show', $song->title, [$song->slug]) !!}`
它就行了。