13.视图共享数据
- 本系列文章为
laracasts.com
的系列视频教程——Let's Build A Forum with Laravel and TDD 的学习笔记。若喜欢该系列视频,可去该网站订阅后下载该系列视频, 支持正版 ;- 视频源码地址:github.com/laracasts/Lets-Build-a-...;
- 本项目为一个 forum(论坛)项目,与本站的第二本实战教程 《Laravel 教程 - Web 开发实战进阶》 类似,可互相参照。
本节说明
- 对应视频第 13 小节:Extracting to View Composers
本节内容
本节的内容比较简单,主要是对前面章节的内容进行优化。
在前面的章节中,我们使用了App\Channel::all()
这样简单粗暴的办法来获取所有的channel
,现在让我们更优雅地重写这段代码。我们将使用 Laravel 的 视图共享数据 功能:
如果需要共享一段数据给应用程序的所有视图,你可以在服务提供器的 boot 方法中调用视图 Facade 的 share 方法。例如,可以将它们添加到 AppServiceProvider 或者为它们生成一个单独的服务提供器。
让我们来使用此功能:
forum\app\Providers\AppServiceProvider.php
.
.
public function boot()
{
Carbon::setLocale('zh');
\View::share('channels',\App\Channel::all());
}
.
.
现在我们可以在视图中直接使用$channels
变量:
forum\resources\views\layouts\app.blade.php
.
.
<ul class="dropdown-menu">
@foreach($channels as $channel) -->此处使用 $channels
<li><a href="/threads/{{ $channel->slug }}">{{ $channel->name }}</a> </li>
@endforeach
</ul>
.
.
forum\resources\views\threads\create.blade.php
.
.
<div class="form-group">
<label for="channel_id">Choose a Channel</label>
<select name="channel_id" id="channel_id" class="form-control" required>
<option value="">Choose One...</option>
@foreach($channels as $channel) -->此处使用 $channels
<option value="{{ $channel->id }}" {{ old('channel_id') == $channel->id ? 'selected' : ''}}>
{{ $channel->name }}
</option>
@endforeach
</select>
</div>
.
.
访问页面,一切如常: