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'
]);


本文作者:佚名

来源:51CTO

相关文章
|
3月前
|
存储 数据库连接 API
具有嵌套关系的可重用API资源——Laravel5.5
本文聚焦于利用 Laravel 中的 Resource::collection,并强调控制器对于处理数据关系包含的重要性。
37 1
|
8天前
|
缓存 API 数据库
Django中的视图装饰器:扩展视图功能的利器
【4月更文挑战第15天】Django视图装饰器用于扩展视图功能,如权限验证、缓存控制和日志记录。它们是Python的高级特性,能不修改原始函数代码就添加新功能。Django提供内置装饰器,如`@login_required`(强制用户登录)、`@cache_page`(缓存视图输出)和`@csrf_protect`(CSRF保护)。同时,开发者可自定义装饰器,例如上面的`timing_decorator`用于记录视图执行时间。使用装饰器时要注意性能影响、执行顺序和参数处理。装饰器增强了代码复用性和可维护性。
|
4月前
|
存储 数据库 Python
创建视图——基于函数的视图 Django
创建视图——基于函数的视图 Django
24 0
Yii2.0如何创建一个视图?底层原理是什么?
Yii2.0如何创建一个视图?底层原理是什么?
|
缓存 安全 JavaScript
Yii2.0的视图渲染机制是怎样的?底层原理是什么?
Yii2.0的视图渲染机制是怎样的?底层原理是什么?
|
前端开发 JavaScript PHP
Yii2的视图是什么?底层原理是什么?
Yii2的视图是什么?底层原理是什么?
|
开发者
Yii2.0的默认视图文件是什么?底层原理是什么?
Yii2.0的默认视图文件是什么?底层原理是什么?
Yii2.0如何创建一个控制器?底层原理是什么?
Yii2.0如何创建一个控制器?底层原理是什么?
|
Java fastjson Maven
Android组件化开发(二)--网络请求组件封装
前面一篇文章我们讲解了`maven私服`的搭建,maven私服在`组件化框架`中有一个很重要的地位就是可以将我们的`lib`库放到局域网中,供公司其他开发者使用,实现类库的分享。 下面是这个系列准备实现的一个`组件化实战项目框架`:
|
JavaScript PHP SEO
Laravel 视图 使用技巧总结
Laravel 搭建网站非常简单,相比于VUE等单页面项目,对SEO非常友好。Laravel 的 Blade 特性丰富,掌握 Blade 的使用技巧,能让我们的开发更快一步。
124 0