web-dev-qa-db-ja.com

Laravel 5-link_to_route()メソッドは、最後に「?」を追加して、ルートパラメータをクエリ文字列に変更します。

何時間も検索した後でも、L5に関する答えが見つかりませんでした。

私の問題は何ですか:

次のようなリンクを作成したいと思います。

localhost:800/songs/you-drive-me-crazy

しかし、getとは:

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

私はすべてを試しましたが、まだ成功していません。あなたの提案が役立つかもしれません。

ありがとう。

7
Saj

Link_to_routeの使用法が正しくありません:

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

最初のパラメーターはルート名であり、2番目のパラメーターはルートパラメーターの配列であり、できればキー値を使用します。定義したルートを表示しなかったため、この連想配列がどのように表示されるかを推測するのは困難です。

_{!! 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
Luceos

あなたの大きな懸念と提案に感謝し、それを修正しました。

私はここで間違ったルートにリンクしていました:

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

今、私はそれを次のように変更しました:

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

そしてそれはトリックをしました。

1
Saj