laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容。
首先,需要注意的一点是:都是使用 View 门面来访问 IlluminateContractsViewFactory 的底层实现
视图门面share()方法
有时需要在所有视图之间共享数据片段,这时候可以使用视图门面的 share 方法。
1,一般情况下,我会在apphttpControllersxx下创建一个基础控制器 BaseController.php,
initViewShare(); //视图共享数据 } /** * 视图共享数据方法 */ public function initViewShare() { view()->share('action_name',get_action_name()); //当前URL的方法器名 }}//视图使用 //共享视图一般都是在layout中{{ $action_name }}
get_action_name() 是自定义的一个函数。
tips:
创建 appHelpersExtmanFun.php , composer.json的autoload引入
"files":[ "app/Helpers/ExtmanFun.php" ]
运行 composer dump-autoload 会自动加载
2,在 AppServiceProvider 服务提供器(或者新建提供器) 的boot方法中调用share()
美间AI
美间AI:让设计更简单
45 查看详情
share('name','共享数据片段'); }}
视图门面composer()方法
视图合成器是当视图被渲染时的回调函数或类方法 ,如果你每次渲染视图时都要绑定视图的数据,比如用户登陆信息。可以使用composer() 将逻辑组织到一个单独的地方。
本例中,我们将在AppServiceProvider服务提供器中注册视图合成器,
提供器代码如下:
composer( //'*', 'AppHttpViewComposersAuthComposer' //['extman.home, welcome'], 'AppHttpViewComposersAuthComposer' ['extman.*'], 'AppHttpViewComposersAuthComposer' ); //使用基于回调函数 view()->composer('*',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); }); }other code}
如果创建一个新的服务提供器来包含视图composer 注册,需要添加该服务提供者到配置文件 config/app.php 的 providers 数组中
到此已经注册了视图合成器,每次渲染 extman目录下所有视图时都会执行 AuthComposer@compose 方法。
定义视图合成器类 AppHttpViewComposersAuthComposer.php
users = $users; } //绑定数据到视图 public function compose(View $view) { $user_info = Auth::user(); $view->with('motto', $user_info); $view->with('count', $this->users->count()); }}
视图被渲染前,AuthComposer类的 compose 方法被调用,同时 IlluminateViewView 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。
所有的视图合成器都会通过 服务容器 进行解析,所以你可以在视图合成器的构造函数中类型提示需要注入的依赖项。
相关文章推荐:
详解Laravel视图间共享数据与视图Composer_php实例
Laravel 5框架学习之向视图传送数据,laravel框架
以上就是laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法(附代码)的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/215489.html
微信扫一扫
支付宝扫一扫