Php Laravel ViewServiceProvider不接受多个视图

Php Laravel ViewServiceProvider不接受多个视图,php,laravel,laravel-5,laravel-blade,Php,Laravel,Laravel 5,Laravel Blade,我的Laravel版本是5.8.23 根据上的文档,为了一次将视图生成器附加到多个视图,请在第一个参数内以数组形式传递视图,如下所示: View::composer(['profile', 'dashboard'], 'App\Http\View\Composers\MyViewComposer'); 当我尝试使用类似的方法时,数组中的第二个值没有得到我在AnimalComposer.php中传递的值 我的代码: View::composer(['animal.edit', ' ani

我的Laravel版本是5.8.23

根据上的文档,为了一次将视图生成器附加到多个视图,请在第一个参数内以数组形式传递视图,如下所示:

View::composer(['profile', 'dashboard'],
    'App\Http\View\Composers\MyViewComposer');
当我尝试使用类似的方法时,数组中的第二个值没有得到我在AnimalComposer.php中传递的值

我的代码:

View::composer(['animal.edit', ' animal.create'],
            'App\Http\Views\Composers\AnimalComposer'
        );
我在animal/create.blade.php中得到了errorException

未定义变量:animalType

但是,如果我使用multiple View::composer将数据发送到blade.php,它可以正常工作

public function boot()
{
    View::composer('animal.edit',
        'App\Http\Views\Composers\AnimalComposer'
    );
    View::composer('animal.create',
        'App\Http\Views\Composers\AnimalComposer'
    );
}
编辑我的AnimalComposer.php文件

//AnimalComposer.php

namespace App\Http\Views\Composers;
use App\AnimalType;
use App\Helpers\GenderHelper;

class AnimalComposer
{
    public function compose($view)
    {
        $animalType = AnimalType::pluck('name', 'id');
        $genderLists = GenderHelper::getGenderSelectArray();

        $view->with('animalType', $animalType)
            ->with('genderLists', $genderLists);
    }

}
我错过什么了吗?每次将AnimalComposer发送到视图时是否需要使用View::composer?Laravel现在是否不支持阵列内的多个视图

遵循这些步骤

  • 创建视图生成器服务提供程序
  • 将提供程序添加到confing/app.php
  • 3.在您的ViewComposer服务提供程序中,我为演示创建了composeHeader和composeFooter方法,您可以用这种方式创建自己的方法

        /**
         * Bootstrap the application services.
         *
         * @return void
         */
        public function boot()
        {
            $this->composeHeader();
            $this->composeFooter();
        }
    
        /**
         * Register the application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    
        private function composeHeader()
        {
            view()->composer('front.layouts.partials.header', 'App\Http\ViewComposers\HeaderComposer@compose');
        }
    
        private function composeFooter()
        {
            view()->composer('front.layouts.partials.footer', 'App\Http\ViewComposers\FooterComposer@compose');
        }
    
  • 在App\Http\ViewComposer\FooterComposer和App\Http\ViewComposer\HeaderComposer中,您可以通过这种方式共享对象或集合
  • 作曲家转储自动加载

  • 现在,您可以在front.layouts.partials.header partials的任何位置访问$menuitems集合


  • 仅此而已

    在查看了Laravel Lightning源代码之后,还有一个名为composers的方法,其中键成为回调:

    View::composers(
        [
            'App\Http\Views\Composers\AnimalComposer' => ['animal.edit', ' animal.create']
        ]);
    
    vendor/laravel/framework/src/illumb/View/Concerns中所示/ManagesEvents@composers
    。文档中没有提到它


    @比马尔·普拉萨德·潘迪的主张是可靠的。如果你在一个大项目上工作,比马尔的想法更可取

    您是否已将视图生成器提供程序添加到config/app.php中的提供程序数组中?是的,我已将其添加到@BimalPrasadPandey中。您是否可以发送AnimalComposer的编写方法代码请将AnimalComposer.php文件添加到@BimalPrasadPandey
        /**
         * Bootstrap the application services.
         *
         * @return void
         */
        public function boot()
        {
            $this->composeHeader();
            $this->composeFooter();
        }
    
        /**
         * Register the application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    
        private function composeHeader()
        {
            view()->composer('front.layouts.partials.header', 'App\Http\ViewComposers\HeaderComposer@compose');
        }
    
        private function composeFooter()
        {
            view()->composer('front.layouts.partials.footer', 'App\Http\ViewComposers\FooterComposer@compose');
        }
    
    use App\Models\Admin\Menu;
    class HeaderComposer
    {
        /**
         * Create a new profile composer.
         *
         * @param  UserRepository  $users
         * @return void
         */
        public function compose(View $view)
        {
            $menuitems = Menu::where('parent_id',0)->where('status',1)->get();
            $view->with('menuitems', $menuitems);
        }
    }
    
    View::composers(
        [
            'App\Http\Views\Composers\AnimalComposer' => ['animal.edit', ' animal.create']
        ]);