laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法(附代码)

互联网 18-8-2
laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容。

首先,需要注意的一点是:都是使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现

视图门面share()方法

有时需要在所有视图之间共享数据片段,这时候可以使用视图门面的 share 方法。

1,一般情况下,我会在app\http\Controllers\xx下创建一个基础控制器 BaseController.php,

<?php namespace App\Http\Controllers\ExtMan;  use Illuminate\Routing\Controller;  class BaseController extends Controller {     public function __construct(\Auth $auth)     {         $this->initViewShare();    //视图共享数据     }     /**      *  视图共享数据方法      */     public function initViewShare()     {         view()->share('action_name',get_action_name()); //当前URL的方法器名      } }   //视图使用  //共享视图一般都是在layout中 {{ $action_name }}

get_action_name() 是自定义的一个函数。

tips:创建 app\Helpers\ExtmanFun.php , composer.json的autoload引入

 "files":[      "app/Helpers/ExtmanFun.php"  ]

运行 composer dump-autoload 会自动加载

2,在 AppServiceProvider 服务提供器(或者新建提供器) 的boot方法中调用share()

<?php namespace App\Providers; use View; class AppServiceProvider extends ServiceProvider {     /**      * 启动所有应用服务      *      * @return void      */     public function boot()     {         View::share('key', 'value');         //也可使用         view()->share('name','共享数据片段');     } }

视图门面composer()方法

视图合成器是当视图被渲染时的回调函数或类方法 ,如果你每次渲染视图时都要绑定视图的数据,比如用户登陆信息。可以使用composer() 将逻辑组织到一个单独的地方。本例中,我们将在AppServiceProvider服务提供器中注册视图合成器,提供器代码如下:

<?php namespace App\Providers;  #use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider {     public function boot()     {         // 使用基于类方法         // 第一个参数可以指定共享给那个视图,多个视图用数组,共享到全部视图可以用 *         // 或者某个目录下所有视图          view()->composer(             //'*', 'App\Http\ViewComposers\AuthComposer'             //['extman.home, welcome'], 'App\Http\ViewComposers\AuthComposer'             ['extman.*'], 'App\Http\ViewComposers\AuthComposer'         );          //使用基于回调函数         view()->composer('*',function($view){             $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));         });     } other code }

如果创建一个新的服务提供器来包含视图composer 注册,需要添加该服务提供者到配置文件 config/app.php 的 providers 数组中

<?php namespace App\Http\ViewComposers;  use Illuminate\View\View; use Illuminate\Repositories\UserRepository;  class AuthComposer {     protected $users;      public function __construct(UserRepository $users)     {         // 依赖注入通过服务容器自动解析...         $this->users = $users;     }      //绑定数据到视图     public function compose(View $view)     {         $user_info = \Auth::user();         $view->with('motto', $user_info);         $view->with('count', $this->users->count());     } }

视图被渲染前,AuthComposer类的 compose 方法被调用,同时 Illuminate\View\View 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。

所有的视图合成器都会通过 服务容器 进行解析,所以你可以在视图合成器的构造函数中类型提示需要注入的依赖项。

相关文章推荐:

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

Laravel 5框架学习之向视图传送数据,laravel框架

以上就是laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法(附代码)的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: laravel
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Laravel框架的生命周期有哪几个阶段?Laravel生命周期四个阶段的介绍

相关资讯