Menu

13.视图共享数据

本节说明

  • 对应视频第 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>
.
.

访问页面,一切如常:
file

本文章首发在 Laravel China 社区
上一篇 下一篇
讨论数量: 0
发起讨论


暂无话题~