Laravelでパンくずを設置するのに便利なlaravel-breadcrumbsで以下のようなエラーが出た場合の対処法。
・エラーの例
Missing required parameters for [Route: media.show] [URI: media/{media_slug}]. (View: /app/resources/views/layouts/base.blade.php)
原因
パラメータ付きのルートをパンくずで指定する時に、パラメータの値を渡さないために発生。
対処法
パンくずの設定でルート名を指定する時に必要なデータを渡す。
ポイントは2つ。
- functionの引数で変数を指定する。
- routeの指定でデータを渡す。
例えば、URIがmedia/{media_slug}
のようにパラメータを必要とする場合に、パンくずの中でルート名を指定した場合は以下になる。
Route::get('media/{media_slug}', 'ServiceController@show')->name('media.show');
Breadcrumbs::for('media.show', function ($trail, $media_slug) {
$trail->parent('media.index');
$trail->push( $media_slug, route('media.show', [ 'media_slug' => $media_slug]));
・function ($trail, $media_slug)
$trail
はパンくずを表示するために必須の変数。第二引数でルートに渡すデータを指定する。
なお、上記例では、パンくずで表示する名前にもこの変数を指定している。
・route('ルート名', [ 'キー名' => 値 ])
ルート名がパラメータを持つ場合は、Key-Valueの形式で第2引数でデータを渡す必要がある。
なお、キー名をパラメータ名と合わせる必要はない。(何でもいい)