我想将网站的某些HTML部分卸载到部分(包含)文件中,而不是重复每个视图或布局中的信息。但是,我还需要它们来包含特定数据。一个明显的例子是头部;我想把它放到一个部分,但我也希望能够为每个页面设置文档标题和META字段。
我认为最好的方法是使用Laravel's view-composer
根据文档,我可以使用数组一次为多个视图定义作曲家:
View::composer(array('view1','view2', 'view3'), function($view)
{
$view->with('count', User::count());
});
但是,如果我想在每个视图中使用这个作曲家,就像我在这种情况下那样呢?
有一些答案围绕着SO(例如this one),这表明我使用了通配符。所以这是我的代码:
View::composer('*', function($view)
{
$view->with('header', View::make('partials.head', $view->getData()));
$view->with('footer', View::make('partials.footer', $view->getData()));
});
问题在于:使用这个目前正在给我一个内存不足错误,这表明效率非常低(因此我真的不应该这么做这一点)。
所以我真的需要传递一个列出我网站上每个页面的数组吗?
是否有办法在每个呈现的网页上使用composer,就像我可以使用View::share();
一样?
答案 0 :(得分:2)
如果每个视图的数据都是唯一的,那么将它放在视图编辑器中是没有意义的;您只需使用刀片模板即可完成此操作,并将特定于页面的数据传递给控制器中的视图。
设置页眉和页脚部分,然后设置一个基本模板,使用@include
加载页眉和页脚部分,然后使用@yield('content')
添加内容部分。
<!DOCTYPE html>
...
@include('partials.header')
@yield('content')
@include('partials.footer')
...
然后您的各个页面的视图将扩展此基本模板:
@extends('base')
@section('content')
//...specific page content here
@stop
在页眉和页脚部分中,包括{{ $someData }}
,以便在页面之间更改任何特定需求,并将该数据传递给控制器中的每个视图。
答案 1 :(得分:0)