php - Laravel ViewServiceProvide 不接受多个 View

标签 php laravel laravel-5 laravel-blade

我的 Laravel 版本是 5.8.23

根据 Laravel View Composer 上的文档,为了一次将 View 编辑器附加到多个 View ,在第一个参数内传递数组中的 View ,如:

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

Undefined variable: animalType

但是如果我使用多个 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 时都需要使用 View::composer 吗? Laravel 现在不支持数组内的多个 View 吗?

最佳答案

按照这些步骤,

  1. 创建 View 编辑器服务提供者。
php artisan make:provider ViewComposerServiceProvider
  1. 将提供者添加到 confing/app.php
  'providers' => [
     ...
        App\Providers\ViewComposerServiceProvider::class,
     ...
  ];

3.在你的ViewComposerServiceProvider中,我已经为演示创建了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');
    }
  1. 在App\Http\ViewComposers\FooterComposer 和App\Http\ViewComposers\HeaderComposer 中,您可以通过这种方式共享对象或集合
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);
    }
}
  1. Composer 转储自动加载

  2. 现在您可以在任何地方访问 front.layouts.partials.header partials 中的 $menuitems 集合。

就这些

关于php - Laravel ViewServiceProvide 不接受多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56730145/

相关文章:

Laravel 5 - 使用 'old' 预填充表单

php - SQL命令有问题吗?

php - MYSQL 获取列

php - 将MySQL表与多维数组相关转换

php - 多个路由到同一个 Controller

php - Laravel 功能测试 ajax 控件

php - 在 slim 框架中使用 PDO 的方法是什么?

php - Laravel 5 - 如何计算连接和分组的总记录数

arrays - Laravel 验证对象 JSON 数组

javascript - Laravel Javascript - 检查 session 中是否存在主题,添加类