Saj*_*Saj 7 php helpers laravel laravel-5
经过几个小时的搜索,我仍然找不到我的答案L5.
我的问题是:
我想建立一个像这样的链接:
localhost:800/songs/you-drive-me-crazy
Run Code Online (Sandbox Code Playgroud)
但是得到的是:
localhost:800/songs?you-drive-me-crazy
Run Code Online (Sandbox Code Playgroud)
我的路由参数正在变为查询字符串.
//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'] );
Run Code Online (Sandbox Code Playgroud)
我在用:
{!! link_to_route('songs.index', $song->title, [$song->slug]) !!}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切但尚未成功,你的建议可能会有所帮助.
谢谢.
Luc*_*eos 11
您对link_to_route的使用不正确:
{!! link_to_route('songs.index', [$song->title, $song->slug]) !!}
Run Code Online (Sandbox Code Playgroud)
第一个参数是路径名,第二个参数是路径参数数组,最好使用键值.因为您没有显示已定义的路径,所以很难猜出这个关联数组应该是什么样子:
{!! link_to_route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug]) !!}
Run Code Online (Sandbox Code Playgroud)
另外,我建议您使用记录的功能:route(),请参阅:http://laravel.com/docs/5.0/helpers#urls
正确请求的路线使用route():
{!! route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug]) !!}
Run Code Online (Sandbox Code Playgroud)
格式正确的路线将是:
Route::get('songs/{title}/{slug}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);
Run Code Online (Sandbox Code Playgroud)
这将产生如下URL: http://localhost:800/songs/you-drive-me-crazy/slug
如果您只想将标题添加到URL而不是slug,请使用如下路线:
Route::get('songs/{title}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);
Run Code Online (Sandbox Code Playgroud)
这将产生如下URL: http://localhost:800/songs/you-drive-me-crazy/?slug=slug
运用
Route::get('songs/{slug}', ['as' => 'songs.index', 'uses' => 'SomeController@index']);
Run Code Online (Sandbox Code Playgroud)
URL将如下:http://localhost:800/songs/you-drive-me-crazy/?title=title假设现在是slugyou-drive-me-crazy
route()如果路径定义中不存在调用中的任何添加参数,则将其添加为GET参数.