Laravel 5 - link_to_route()方法通过添加"?"使我的路由参数变为查询字符串 在末尾

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参数.