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

1、在视图间共享数据

除了在单个视图中传递指定数据之外,有时候需要在所有视图中传入同一数据,即我们需要在不同视图中共享数据。要实现这一目的,需要使用视图工厂的share方法。

全局帮助函数view和response类似,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例。所以我们可以通过在服务提供者的boot方法中使用如下方式实现视图间共享数据:

<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //视图间共享数据 view()->share('sitename','Laravel学院'); } /** * Register any application services. * * @return void */ public function register() { // } }

我们在routes.php中定义两个路由:

Route::get('testViewHello',function(){ return view('hello'); }); Route::get('testViewHome',function(){ return view('home'); });

然后在resources/views目录下创建一个home.blade.php视图文件,内容如下:

{{$sitename}}首页

再创建一个hello.blade.php视图文件:

欢迎来到{{$sitename}}!

在浏览器中分别访问http://laravel.app:8000/testViewHello和http://laravel.app:8000/testViewHome,则都能解析出$sitename的值。

2、视图Composer

有时候我们想要在每次视图渲染时绑定一些特定数据到视图中,比如登录用户信息,这时候我们就要用到视图Composer,视图Composer通过视图工厂的composer方法实现。该方法的第二个回调参数支持基于控制器动作和闭包函数两种方式。

简单起见,我们还是基于AppServiceProvider,不去单独创建服务提供者,这里我们传递闭包参数(控制器动作参考视图文档):

<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { //视图间共享数据 view()->share('sitename','Laravel学院'); //视图Composer view()->composer('hello',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); }); } /** * Register any application services. * * @return void */ public function register() { // } }

修改hello.blade.php视图文件:

欢迎来到{{$sitename}}!

<h3>用户信息</h3> 用户名:{{$user['name']}}<br> 用户头像:{{$user['avatar']}}

在浏览器中访问http://laravel.app:8000/testViewHello,输出内容如下:

欢迎来到Laravel学院! 用户信息 用户名:test 用户头像:/path/to/test.jpg

你也可以传递数据到多个视图:

view()->composer(['hello','home'],function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); });

甚至所有视图(使用通配符*):

view()->composer('*',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); });

以上就是Laravel视图间共享数据及视图Composer的详细内容,希望本文对大家学习Laravel有所帮助。

时间: 2024-12-30 17:41:03

详解Laravel视图间共享数据与视图Composer的相关文章

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

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

详解智能交通应用大数据“三重门”

文章讲的是详解智能交通应用大数据"三重门",武汉市悬在路口立杆上的金属小盒子--超级电子眼3个月抓了13万起交通违法,逆行.压线.套牌一眼识别,并能自动报警. 只需10秒,重庆市凭借280万多张"电子牌"的信息传递,各地的道路拥堵信息即可传递到设置在附近的交通诱导屏上. 400多个公交站点,1000多辆公交车, 80多条公交线路,全部被江苏省镇江市交通系统中央指挥中心的工作人员透过实时全景视图,实时监控.出行者随时可获得公交时刻信息和延误预报-- 全国智能交通(IT

共享内存-android系统进程间共享数据的同步问题

问题描述 android系统进程间共享数据的同步问题 想在android系统层写两个可执行程序(main_a,main_b),使用ndk-build编译. main_a 用来录音,main_b通过进程件套通信方式从main_a中把录音数据接收过来保存成文件.对于android来说,能想到的进程间通信方式是mmap,(匿名管道不行:命名管道有长度限制:匿名共享内存貌似得不到相同的文件句柄,而且内部也是使用mmap实现的).现在能用mmap共享数据,但是两个进程之间读写数据无法做同步.(据我了解li

C++进程间共享数据实例_C 语言

本文实例讲述了C++进程间共享数据的实现方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: int main(int argc, char *argv[])  {      //RecursiveDelete("C:\\20_128\\");      //SelfRun("runModel");      //进程间内存共享      LPCTSTR lpName= "hello";      LPCTSTR lpConten

Python multiprocessing.Manager介绍和实例(进程间共享数据)_python

Python中进程间共享数据,处理基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Manager()返回的manager对象控制了一个server进程,此进程包含的python对象可以被其他的进程通过proxies来访问.从而达到多进程间数据通信且安全. Manager支持的类型有list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaph

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

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

《策略驱动型数据中心——ACI技术详解》——第1章 数据中心架构考虑因素1.1 应用和存储

第1章 数据中心架构考虑因素 本章介绍数据中心架构所需考虑的因素.其中将介绍设计时的考虑因素和设计过程中使用的方法,以便对于数据中心矩阵项目,使架构师能高效地选择端到端的网络设计,为其演进提供所需的增长能力. 在数据中心网络设计过程中,在架构选择和最终设计方面需要注意以下一些关键考虑因素. 要托管在数据中心的应用和这些应用将使用的存储类型. 数据中心的需求和限制,包括物理决策和POD模型. 不同类型的数据中心设计. 大多数的数据中心矩阵部署是用于虚拟化数据中心的.本章还介绍了数据中心的其他应用场

《策略驱动型数据中心——ACI技术详解》一1.3 数据中心设计

1.3 数据中心设计 策略驱动型数据中心--ACI技术详解数据中心网络基础架构设计,还包括定义交换机如何互联和如何保证网络中的数据通信.在包含接入.汇聚和核心的三层设计方法中,思科vPC是数据中心最常用的部署技术.还有一种被称之为"主干-叶节点"的新型两层矩阵的设计方法.这两种方法都会在本章后面的"采用主干-叶节点的ACI基础架构的逻辑数据中心设计"小节中介绍. 物理数据中心有3种基本的设计方法:列端式(EoR).列中式(MoR)和架顶式(ToR).该命名约定表示网

详解Android系统中跨应用数据分享功能的实现_Android

一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Intent的Action触发,定义Intent的Action例如ACTION_SEND,你大概可以猜到指定Action为ACTION_SEND的Intent的作用是从一个Activity发送数据到另一个Activity,甚至跨越不同的进程,将数据发送给另一个Activity,你需要指定数据和他的类型,系