Laravel 自定义视图组件

laravel 的视图合成器可将数据与指定视图绑定在一起,避免了重复编写代码。

View::composer('profile', 'AppHttpViewComposersProfileComposer');

由于数据的生成和渲染是分开进行的,理解起来不够直观。因此,可以采用视图组件的方式将两者进行封装

<?php namespace AppViewComponents; use IlluminateContractsSupportHtmlable; use IlluminateHttpRequest; use IlluminateSupportFacadesView; class ExampleComponent implements Htmlable {     private $color;     private $request;     public function __construct(Request $request, string $color)     {         $this->color = $color;         $this-&gt;request = $request;     }     public function toHtml()     {            return View::make('example')             -&gt;with('color', $this-&gt;color)             -&gt;render();     } }

在视图中使用

{{ app()-&gt;makeWith(AppViewComponentsExampleComponent::class,['color' =&gt; 'green'])-&gt;toHtml() }}

封装指令

Blade::directive('render', function ($expression) {     list($class, $params) = explode(',', $expression, 2);     $class = "AppViewComponents".trim($class, ''" ');     return "<?php  echo app()->makeWith('$class', $params)-&gt;toHtml(); ?&gt;"; });

使用指令

@render('ExampleComponent', ['color' =&gt; 'green'])

参考资料

spatie/laravel-view-components: A better way to connect data with view rendering in Laravel Introducing View Components in Laravel, an alternative to View Composers - Laravel News

更多Laravel相关技术文章,请访问Laravel框架入门教程栏目进行学习!

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享