何時間も検索した後でも、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]) !!}
私はすべてを試しましたが、まだ成功していません。あなたの提案が役立つかもしれません。
ありがとう。
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パラメーターとして追加されます。
あなたの大きな懸念と提案に感謝し、それを修正しました。
私はここで間違ったルートにリンクしていました:
`{!! link_to_route('songs.index', $song->title, [$song->slug]) !!}`
今、私はそれを次のように変更しました:
`{!! link_to_route('songs.show', $song->title, [$song->slug]) !!}`
そしてそれはトリックをしました。