После нескольких часов поиска я все еще не мог найти свой ответ относительно 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]) !!}`
и это добилось цели.