Laravel 5 — метод link_to_route (), заставляющий мои параметры маршрута меняться в строку запроса путем добавления & quot;? & Quot; в конце

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

Я перепробовал все, но пока не удалось, ваше предложение может быть полезным.

Благодарю.

5

Решение

Вы используете 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, если его нет в определении маршрута.

11

Другие решения

исправил, спасибо за ваши большие проблемы и предложения.

Я ссылался на неправильный маршрут здесь:

`{!! link_to_route('songs.index', $song->title, [$song->slug])  !!}`

теперь я изменил это как:

`{!! link_to_route('songs.show', $song->title, [$song->slug])  !!}`

и это добилось цели.

1

По вопросам рекламы [email protected]