我的Laravel版本是 5.8.23
根据Laravel View Composer上的文档,为了将视图编辑器一次附加到多个视图,请在第一个参数内部的数组中传递视图,例如:
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
但是,如果我使用多个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现在不支持数组内的多个视图吗?
答案 0 :(得分:1)
执行以下步骤,
make:provider ViewComposerServiceProvider
'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');
}
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 dump-autoload
现在,您可以在任何位置的front.layouts.partials.header部分中访问$ menuitems集合。
就这样
答案 1 :(得分:1)
在查看了Laravel阐明的源代码之后,还有一种称为composer s 的方法,其中的键成为回调:
View::composers(
[
'App\Http\Views\Composers\AnimalComposer' => ['animal.edit', ' animal.create']
]);
如vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents@composers
中所示。文档中未提及。
@Bimal Prasad Pandey的主张是坚定的。如果您从事的是大型项目,那么Bimal的想法是可取的。