经过几个小时的搜索,我仍然找不到关于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]) !!}`