Laravel 5.1 - 将参数传递给面包屑
Laravel 5.1 - Pass parameter to Breadcrumbs
我使用 davejamesmiller Breadcrumbs 包。我想知道如何将参数传递给面包屑,比如 id。
在文档 (here) 中说这是可能的,但找不到实现它的方法。
我的目标是像这样制作面包屑:Dashboard \ User \ New Model
。 New Model 是一种添加与用户有某种关系的模型数据的形式。如果没有 user_id 参数,User
的 link 将无法工作。
有什么想法吗?
可以传全局变量
\View::share ( 'variable2', $variable2 );
如果在布局中呈现面包屑
或者您需要在 `user.new_model.blade
中呈现面包屑
@section('content')
{!! Breadcrumbs::render('page', $page) !!}
@stop`
my way
创建模板
breadcrumbs.blade.php
有内容
@if(!empty($breadcrumbs))
<ol class="breadcrumb">
<li>{!! link_to_route('main', 'Home') !!}</li>
@foreach($breadcrumbs as $bread)
@if(isset($bread['url']))
<li>{!! link_to($bread['url'], $bread['name']) !!}</li>
@else
<li>{!! $bread['name'] !!}</li>
@endif
@endforeach
</ol>
@endif
并将其连接到布局
@include('breadcrumbs')
并在您的操作中传递链接数组
\View::share('breadcrumbs', [
['url' => route('collection.show', ['id'=>$data->collection, 'url'=>$data->collection]), 'name' => $data->collection->name],
['name' => $data->article]
]);
还有一个办法。通常,在每个视图中,仅调用 Breadcrumbs::render()
应该根据 routes/breadcrumbs.php
.
中定义的路由创建面包屑链接的层次结构
要进一步使用此解决方案,请牢记两个要点:
- 在
breadcrumbs.php
路由定义中找到的回调函数是您应该传递参数的地方。
- 为来自
routes/web.php
的网络路由提供正确的名称,稍后将在 routes/breadcrumbs.php
中使用
查看以下演示上述两点的代码片段:
//Point1: routes/breadcrumbs.php
Breadcrumbs::register('job.edit', function($breadcrumbs, $job, $title)
{
$breadcrumbs->parent('job','job');
$breadcrumbs->push($title, route('job.edit', $job));
});
Breadcrumbs::register('job.edit.install', function($breadcrumbs, $job, $title)
{
$breadcrumbs->parent('job.edit',$job, $title);
$breadcrumbs->push('Job Install Equipments', route('job.edit.install','job'));
});
在上面的代码中我们通过回调函数传递了$job
和$title
//Point2 routes/web.php
Route::get('/job/edit/{job}', 'JobController@edit')->name('job.edit');
Route::get('/job/install-equipments/{job}', 'JobController@installEquipments')->name('job.edit.install');
我们通过name
方法给路线命名,Laravel 5.4,这样我们就可以在Point1中正确定义路线。
最后一步是您在视图文件中所做的。在这里,我将向您展示关于 /job/install-equipments
的最后一个,它应该作为最后一个元素呈现在面包屑中,其父元素是 job/edit
,参数 job
处理主键 id
//install.equipments.blade.php
@extends('layouts.main')
@section('content')
{!! Breadcrumbs::render('job.edit.install',$job->id, __('Edit').': '.$job->title) !!}
以上内容将呈现面包屑:
Home / Job / Edit: title of
job / Job Install Equipment
处理面包屑渲染所需的参数由上述 render
方法提供,即通过 $job->id
和 __('Edit').': '.$job->title)
,最后只是调整文本,它可以在breadcrumbs
路由的回调函数。
我使用 davejamesmiller Breadcrumbs 包。我想知道如何将参数传递给面包屑,比如 id。
在文档 (here) 中说这是可能的,但找不到实现它的方法。
我的目标是像这样制作面包屑:Dashboard \ User \ New Model
。 New Model 是一种添加与用户有某种关系的模型数据的形式。如果没有 user_id 参数,User
的 link 将无法工作。
有什么想法吗?
可以传全局变量
\View::share ( 'variable2', $variable2 );
如果在布局中呈现面包屑
或者您需要在 `user.new_model.blade
中呈现面包屑@section('content')
{!! Breadcrumbs::render('page', $page) !!}
@stop`
my way
创建模板
breadcrumbs.blade.php
有内容
@if(!empty($breadcrumbs))
<ol class="breadcrumb">
<li>{!! link_to_route('main', 'Home') !!}</li>
@foreach($breadcrumbs as $bread)
@if(isset($bread['url']))
<li>{!! link_to($bread['url'], $bread['name']) !!}</li>
@else
<li>{!! $bread['name'] !!}</li>
@endif
@endforeach
</ol>
@endif
并将其连接到布局
@include('breadcrumbs')
并在您的操作中传递链接数组
\View::share('breadcrumbs', [
['url' => route('collection.show', ['id'=>$data->collection, 'url'=>$data->collection]), 'name' => $data->collection->name],
['name' => $data->article]
]);
还有一个办法。通常,在每个视图中,仅调用 Breadcrumbs::render()
应该根据 routes/breadcrumbs.php
.
要进一步使用此解决方案,请牢记两个要点:
- 在
breadcrumbs.php
路由定义中找到的回调函数是您应该传递参数的地方。 - 为来自
routes/web.php
的网络路由提供正确的名称,稍后将在routes/breadcrumbs.php
中使用
查看以下演示上述两点的代码片段:
//Point1: routes/breadcrumbs.php
Breadcrumbs::register('job.edit', function($breadcrumbs, $job, $title)
{
$breadcrumbs->parent('job','job');
$breadcrumbs->push($title, route('job.edit', $job));
});
Breadcrumbs::register('job.edit.install', function($breadcrumbs, $job, $title)
{
$breadcrumbs->parent('job.edit',$job, $title);
$breadcrumbs->push('Job Install Equipments', route('job.edit.install','job'));
});
在上面的代码中我们通过回调函数传递了$job
和$title
//Point2 routes/web.php
Route::get('/job/edit/{job}', 'JobController@edit')->name('job.edit');
Route::get('/job/install-equipments/{job}', 'JobController@installEquipments')->name('job.edit.install');
我们通过name
方法给路线命名,Laravel 5.4,这样我们就可以在Point1中正确定义路线。
最后一步是您在视图文件中所做的。在这里,我将向您展示关于 /job/install-equipments
的最后一个,它应该作为最后一个元素呈现在面包屑中,其父元素是 job/edit
,参数 job
处理主键 id
//install.equipments.blade.php
@extends('layouts.main')
@section('content')
{!! Breadcrumbs::render('job.edit.install',$job->id, __('Edit').': '.$job->title) !!}
以上内容将呈现面包屑:
Home / Job / Edit: title of job / Job Install Equipment
处理面包屑渲染所需的参数由上述 render
方法提供,即通过 $job->id
和 __('Edit').': '.$job->title)
,最后只是调整文本,它可以在breadcrumbs
路由的回调函数。