Laravelのbreadcrumbsでパンくずの設定で変数を複数渡したい時に迷ったので対処方法をメモとして記録。
状況
パラメータ付きのURLを指定する時に、Breadcrumbs::renderの第二引数でデータを渡すが、この時に2つのデータを渡したい。
Breadcrumbs::render('ルート名', 渡すデータ)
そして、bredcrumbs.phpのfunctionで複数のデータを受け取り使いたい。
対処法
- ビューのBreadcrumbs::renderの第二引数は配列のKey-value形式でデータを渡す。
- breadcrumbs.phpでは一つの変数として受け取り、キー名を指定する。
{{ Breadcrumbs::render('media.show', ['name' => $name, 'media_slug' => $media_slug] ) }}
データとして、nameというキー名で$name
を、media_slugというキー名で$media_slug
を渡す。
breadcrumbs.phpでは第二引数としてこのひとまとまりの配列データが渡される。
渡されたデータはfunctionの中で任意の変数に代入する。ここでは$array
に入れる。
呼び出しは、$array['name']
、$array['media_slug']
となる。
Breadcrumbs::for('service.media.show', function ($trail, $array) {
$trail->parent('top');
$trail->push( $array['name'], route('media.show', [ 'media_slug' => $array['media_slug']]));
});
データを渡した部分のみを抜粋すると以下のようになる。
$trail->push( '表示するパンくず名', route('ルート名', [ 'ルートに渡すデータのキー名' => '値']]));
表示するパンくず名に$array['name']
を指定し、パラメータ付きのルート(media.show)に渡すデータを$array['media_slug']
としている。
以上でパンくずおよび無事ページが表示された。
エラー
functonで変数を複数指定した場合
Breadcrumbs::render('ルート名', 渡すデータ)
で指定できるデータは1つのみ。複数ある場合は配列で渡す。
このため、breadcrumbs.phpのfunctionで変数を複数指定するとエラーになる。
Breadcrumbs::for('service.media.show', function ($trail, $name, $media_slug) {
$trail->parent('top');
$trail->push( $array['name'], route('media.show', [ 'media_slug' => $array['media_slug']]));
});
ErrorException (E_ERROR)
Too few arguments to function DaveJamesMiller\Breadcrumbs\BreadcrumbsServiceProvider::{closure}(), 2 passed in /app/vendor/davejamesmiller/laravel-breadcrumbs/src/BreadcrumbsGenerator.php on line 68 and exactly 3 expected (View: /app/resources/views/layouts/base.blade.php) (View: /app/resources/views/layouts/base.blade.php)
viewで変数を複数指定した場合
Breadcrumbs::render('ルート名', 渡すデータ)
で指定できるデータは1つのみのため、ここでデータを複数指定するとエラーになる。
{{ Breadcrumbs::render('service.media.show', 'name' => $name, 'media_slug' => $media_slug ) }}
ErrorException (E_ERROR)
syntax error, unexpected ‘=>’ (T_DOUBLE_ARROW), expecting ‘)’ (View: /app/resources/views/layouts/base.blade.php) (View: /app/resources/views/layouts/base.blade.php)
以上。