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

时间: 2024-09-13 19:06:02

Laravel 5 多个视图共享数据的方法的相关文章

Android实现不同apk间共享数据的方法(2种方法)

本文实例讲述了Android实现不同apk间共享数据的方法.分享给大家供大家参考,具体如下: Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户(Android 系统是基于Linux)的. 所以不同APK(用户)间互相访问数据默认是禁止的. 但是它也提供了2种APK间共享数据的形式: 1. Share Preference. / Content Provider APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Sh

android不同activity之间共享数据解决方法_Android

最近做局域网socket连接问题,要在多个activity之间公用一个socket连接,就在网上搜了下资料,感觉还是application方法好用,帖出来分享下! Android中在不同Activity中传递变量,通常使用Intent中Bundle添加变量的操作方法. 保存参数时: 复制代码 代码如下: Intent intent = new Intent(); intent.setClass(A.this, B.class); Bundle bundle = new Bundle(); bun

在 Node.js 和 C++ 之间使用 Buffer 共享数据

本文讲的是在 Node.js 和 C++ 之间使用 Buffer 共享数据, 使用 Node.js 开发的一个好处是简直能够在 JavaScript 和 原生 C++ 代码之间无缝切换 - 这要得益于 V8 的扩展 API.从 JavaScript 进入 C++ 的能力有时由处理速度驱动,但更多的情况是我们已经有 C++ 代码,而我们想要直接用 JavaScript 调用. 我们可以用(至少)两轴对不同用例的扩展进行分类 - (1)C++ 代码的运行时间,(2)C++ 和 JavaScript

Java多线程编程之访问共享对象和数据的方法_java

多个线程访问共享对象和数据的方式有两种情况: 1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享. 2.每个线程执行的代码不同,例如:设计四个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1. a.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个对象中有共享数据.卖票就可以这样做,每个窗口都在做卖票任务,卖的票都是同一个数据(点击查看具体案例). b.如果每个线程执行的代码不同,就需要使用不同的Runnable对象,有

详解Laravel视图间共享数据与视图Composer_php实例

1.在视图间共享数据 除了在单个视图中传递指定数据之外,有时候需要在所有视图中传入同一数据,即我们需要在不同视图中共享数据.要实现这一目的,需要使用视图工厂的share方法. 全局帮助函数view和response类似,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例.所以我们可以通过在服务提供者的boot方法中使用如下方式实现视图间共享数据: <?php namespace App\Providers; use

详解Laravel视图间共享数据与视图Composer

1.在视图间共享数据 除了在单个视图中传递指定数据之外,有时候需要在所有视图中传入同一数据,即我们需要在不同视图中共享数据.要实现这一目的,需要使用视图工厂的share方法. 全局帮助函数view和response类似,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例.所以我们可以通过在服务提供者的boot方法中使用如下方式实现视图间共享数据: <?php namespace App\Providers; use

使用 ContentProvider 共享数据 访问与添加通讯录

1. 统一的数据访问方式 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据. 文件的操作模式中,通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样可以对外共享数据, 但数据的访问方式会因数据存储的方式而不同,如:采用xml文件对外共享数据,需要进行xml解析来读写数据: 采用sharedpreferences共享数据,需要使用sharedpre

java基础多线程之共享数据

java基础巩固笔记5-多线程之共享数据 线程范围内共享数据 ThreadLocal类 多线程访问共享数据 几种方式 本文主要总结线程共享数据的相关知识,主要包括两方面:一是某个线程内如何共享数据,保证各个线程的数据不交叉:一是多个线程间如何共享数据,保证数据的一致性. 线程范围内共享数据 自己实现的话,是定义一个Map,线程为键,数据为值,表中的每一项即是为每个线程准备的数据,这样在一个线程中数据是一致的. 例子 package com.iot.thread; import java.util

通过视图管理数据

  视图与表具有相似的结构,当向视图中插入或更新数据时,实际上对视图所引用的表执行数据的插入和更新.但是通过视图插入.更新数据和表相比有一些限制,下面通过具体的例子来讲述通过视图插入.更新数据以及其使用的限制.     使用SELECT 语句,可以在视图和表中查到该条记录.但是如果执行下面的语句,虽然仍可以成功执行,但只可以在表而不是视图中查到该条数据.     注意:由于向视图插入数据实质是向其所引用的基本表中插入数据,所以必须确认那些来包括在视图列但属于表的列允许NULL值或有缺省值.