Php 拉威尔视图生成器

Php 拉威尔视图生成器,php,laravel,Php,Laravel,我正在学习拉威尔的一个教程,有一点我不明白。它指的是使用视图生成器 -我有一个名为fromapp/http/routes.php的模板,给定一个Url: Route::get('cats/create',function(){return view('cats.create');}) 这是cats/create.blade.php: 4.-这是CatFormComposer class CatFormComposer { protected $breeds; public fu

我正在学习拉威尔的一个教程,有一点我不明白。它指的是使用视图生成器

  • -我有一个名为from
    app/http/routes.php
    的模板,给定一个Url:

    Route::get('cats/create',function(){return view('cats.create');})

  • 这是
    cats/create.blade.php

    4.-这是
    CatFormComposer

    class CatFormComposer
    {
        protected $breeds;
    
        public function __construct(Breed $breeds)
        {
            $this->breeds = $breeds;
        }
    
        public function compose(View $view)  {
            $breeds = $this->breeds;
            $view->with('breeds', $breeds->lists('name', 'id'));
        }
    }
    

    它起作用了。我不明白的是,如何将
    $brides
    参数传递给类的构造函数?

    所有视图生成器都由laravel服务容器解析。因此,当您键入hintbride$brides时,laravel将用于查找所需的类并注入该类的实例(在这种情况下:容器将查找bride类,创建新的bride并将实例传递给构造函数)


    此外,为了更深入地理解,您可以查看模式

    谢谢,我明白了。。。为什么他们不能在构造函数中声明并实例化var$?不是更具可读性吗?在测试和松耦合的情况下,遵循构造函数注入可以获得一些巨大的好处。如果他们像您所说的那样在作用域中本地实例化它,那么在不确保正确实现繁殖类的情况下,将很难测试ViewComposer。另一方面,构造函数注入帮助我们模拟繁殖实现并通过构造函数注入它。归根结底,它帮助我们遵守坚实的原则。
    <div class="form-group">
    
     {!! Form::label('name','Name') !!}
    
     <div class="form-controls">
    
      {!! Form::text('name', null, ['class' => 'form-control']) !!}
    
     </div>
    
    </div>
    
    <div class="form-group">
    
     {!! Form::label('date_of_birth', 'Date of Birth') !!}
    
    <div class="form-controls">
      {!! Form::date('date_of_birth', null, ['class' => 'form-control']) !!}
    
     </div>
    
    </div>
    
    <div class="form-group">
    
     {!! Form::label('breed_id','Breed') !!}
    
     <div class="form-controls">
    
     {!! Form::select('breed_id', $breeds, null, ['class' => 'form-control']) !!} 
    
     </div>
    
    </div>
    
    {!! Form::submit('Save Cat', ['class' => 'btn-primary']) !!}
    
    public function boot(ViewFactory $view)
        {
          $view->composer('partials.forms.cat','Furbook\Http\Views\Composers\CatFormComposer');
    }
    
    class CatFormComposer
    {
        protected $breeds;
    
        public function __construct(Breed $breeds)
        {
            $this->breeds = $breeds;
        }
    
        public function compose(View $view)  {
            $breeds = $this->breeds;
            $view->with('breeds', $breeds->lists('name', 'id'));
        }
    }