Laravel 5 多个视图共享数据的方法

大数据
我们都知道模板一般会用到继承,导航栏就是一个很好的例子,但是导航栏的数据如何共享

 

我们都知道模板一般会用到继承,导航栏就是一个很好的例子,但是导航栏的数据如何共享,比如有个导航的文件叫在view/navigation.blade.php
为了简单一点,文件里只有设置了一个变量
1
{{ $cqh }}
现在的要求是每个页面都会用到这个变量,如何共享这个数据呢?
 
一般这样的操作我会在Laravel服务的boot方法里设置,下面介绍两种共享数据的方法
 

方法一:使用View:share方法,如CqhServiceProvider里

1
2
3
4
public function boot()
{
    View::share('cqh','chenqionghe');
}
这是使用外观模式,也可以直接使用view()方法,
1
view()->share('cqh', 'chenqionghe');

 

方法二:使用composer方法单独对这个navigation.blade.php进行传送数据,方法如下
1
2
3
4
5
6
public function boot()
{
    view()->composer('navigation', function ($view) {
        $view->with('cqh','chenqionghe');
    });
}
以上是使用闭包的形式来完成这个操作,其实这和路由一样,也可以用类来代替,Laravel里叫组件,方法如下
1
2
3
4
public function boot()
{
    View::composer('navigation', 'App\Http\ViewComposers\MyViewComposer');
}
上面这样就是注册了视图组件,并且在每次 navigation视图渲染的时候,MyViewComposer@compose 都将会被执行。
下面我们来看这个组件怎么定义
1
2
3
4
5
6
7
8
9
<?php namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class MyViewComposer
{
    public function compose(View $view)
    {
        $view->with('cqh','chenqionghe');
    }
}
在视图被渲染之前,视图组件的 compose 方法就会被调用,并且传入一个 Illuminate\Contracts\View\View 实例。你可以使用 with 方法来把数据绑定到 view。
 
 
注意:方法一和方法二其实是有区别的,方法一是对所有的视图都传递的cqh数据,而方法二只是对navigation视图传递了cqh数据
如果方法二要达到方法一的效果,可以这样
1
2
3
4
View::composer('*', function($view)
{
    //
});
这样就会对所有视图进行传递了
 
也可以针对多个视图指定MyViewComposer组件
1
View::composer(['navigation', 'footer'], 'App\Http\ViewComposers\MyViewComposer');

 

也可以使用 composers 方法来同时定义一群视图组件
1
2
3
4
5
View::composers([
    'App\Http\ViewComposers\AdminComposer' => ['admin.index', 'admin.profile'],
    'App\Http\ViewComposers\UserComposer' => 'user',
    'App\Http\ViewComposers\ProductComposer' => 'product'
]);

 

 

责任编辑:李英杰 来源: 博客园
相关推荐

2023-12-20 11:12:39

共享内存.NET数据共享

2010-10-26 16:43:58

查看Oracle索引

2010-11-15 11:28:21

oracle自动启动

2021-06-10 00:13:43

C#队列数据

2021-03-26 05:54:00

C#数据方法

2023-07-11 16:01:47

共享数据开发

2020-10-25 08:56:31

数据分析数据大数据

2010-09-09 15:13:33

SQL更新数据

2022-04-12 09:30:00

共享代码块数据集数据科学家

2009-04-07 10:45:43

Oracle视图创建

2011-07-14 17:50:50

domino数据库

2009-01-11 09:28:00

局域网共享上网

2010-11-09 15:06:52

SQL Server动

2011-07-05 10:48:41

javascript

2010-11-16 10:57:18

oracle创建视图

2010-11-12 11:44:37

SQL Server删

2019-01-16 18:39:24

数据开发模型

2010-05-10 18:30:31

Oracle多表创建

2009-08-27 17:39:51

C#多个方法的关联

2010-02-25 13:50:09

Fedora Fire
点赞
收藏

51CTO技术栈公众号