Laravel 自定义视图组件

2020-08-13 18:39:11
Laravel 的视图合成器可将数据与指定视图绑定在一起,避免了重复编写代码。

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

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

<?phpnamespace 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->request = $request;    }    public function toHtml()    {           return View::make('example')            ->with('color', $this->color)            ->render();    }}

在视图中使用

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

封装指令

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

使用指令

@render('ExampleComponent', ['color' => 'green'])

参考资料

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

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