视图合成器

  • 生成自定义的 ProfileComposer ```php <?php namespace App\Http\View\Composers;

use Illuminate\View\View;

class ProfileComposer {

  1. /**
  2. * 将数据绑定到视图
  3. * @param View $view
  4. * @return void
  5. */
  6. public function compose(View $view)
  7. {
  8. $view->with('count', 123);
  9. }

}


- 生成自定义的 ViewServiceProvider
> 两种方式
> `使用闭包的方式,对指定视图生效,可以 * 作为通配符`
> `也可使用基类的合成器,指定模板`

```php
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ViewServiceProvider extends ServiceProvider
{

    public function register()
    {
        //
    }

    public function boot(View $view)
    {
        // 直接使用视图合成器 针对所有视图文件
        view()->share('sitename','Laravel学院');
        //视图Composer
        view()->composer('home/*',function($view){
            $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
        });

        // 针对特定文件  home/test1.blade.php
        View::composer("home/test1","App\Http\View\Composers\ProfileComposer");
    }
}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
view/home/test1/blade.php <br/>
{{ dirname(__FILE__) }} <br/>
{{ __LINE__ }} 姓名:{{ $name }} <br/>
{{ __LINE__ }} 年龄:{{ $age }} <br/>
{{ __LINE__ }} 数量:{{ $count }} <br/>
{{ __LINE__ }} 课程名:{{ $sitename }} <br/>
{{ __LINE__ }} 用户姓名:{{ $user['name'] }} <br/>
{{ __LINE__ }} 用户头像:{{ $user['avatar'] }} <br/>
</body>
</html>