网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 详解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有所帮助。
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/22 9:31:43