Laravel 5 - link_to_route()方法通过添加“?”使我的路由参数变为查询字符串最后

时间:2015-06-02 04:20:45

标签: php laravel laravel-5 helpers

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

我已尝试过所有但尚未成功的建议,您的建议可能会有所帮助。

感谢。

2 个答案:

答案 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])  !!}`

它就行了。