我的 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 吗?
最佳答案
按照这些步骤,
- 创建 View 编辑器服务提供者。
php artisan make:provider ViewComposerServiceProvider
- 将提供者添加到 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');
}
- 在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);
}
}
Composer 转储自动加载
现在您可以在任何地方访问 front.layouts.partials.header partials 中的 $menuitems 集合。
就这些
关于php - Laravel ViewServiceProvide 不接受多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56730145/