laravel模板 视图中设置全局变量

laravel模板 视图中设置全局变量

有一些数据需要在所有模板中都能调用到,比如网站配置信息,联系方式等等信息需要全站调用,又不能在每个控制器都重复写代码来实现。


这种需求可以利用视图组件来实现,就是预设视图组件数据变量

就是在Provider的boot方法中定义全局变量。

#在所有的视图模板中共享posts变量,相当于就是全局变量了
view()->share('posts', Post::recent());
#指定模板中共享变量
view()->composer('post.sidebar', function ($view) { 
    $view->with('posts', Post::recent()); 
});

#指定模板目录共享变量
view()->composer('post.*', function ($view) { 
    $view->with('posts', Post::recent()); 
});

#指定多个视图中共享变量
view()->composer(['post.header', 'post.footer'], function ($view) { 
    $view->with('posts', Post::recent()); 
});

还可以自定义业来实现:

<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class PostViewComposer
{
    public function compose(View $view)
    {
        $view->with('posts', Post::recent()); 
    }
}

#使用

View::composer(['post.header', 'post.footer'], 'App\Http\ViewComposers\PostViewComposer');


在源码中其实还有一个方法,在文档中我没有找到它的说明,以数组的方式定义多个组件

View::composers([
    'App\Http\ViewComposers\PostComposer' => ['post.head', 'post.foot'],
    'App\Http\ViewComposers\UserComposer' => 'user'
]);
Illuminate\View\Concerns\ManagesEvents
在这个trait中还有其他功能包括添加视图事件,感兴趣可以自己去看看。




Tags php

留言(0)

评论