如何在Laravel Blade组件中避免使用isset()且无需传全变量?
Laravel Blade组件省略可选参数的解决方案
方法一:匿名组件用@props声明默认值
在你的Blade组件文件开头,通过@props指令定义所有变量及默认值,这样调用时可直接省略带默认值的参数:
@props([ 'url' => '', 'title' => '', 'wrapperClass' => '', 'paraClass' => '' ]) <a href="{{ $url }}" class="{{ $wrapperClass }}"> <p class="{{ $paraClass }}">{{ $title }}</p> </a>
调用组件时只需传入必填参数:
<x-mycomponent url="{{ $book->url }}" title="{{ $book->title }}" />
方法二:类组件在构造函数设置默认值
如果是通过Artisan命令创建的类组件,打开对应的组件类文件(如App\View\Components\MyComponent.php),在构造函数里给可选参数设置默认值:
<?php namespace App\View\Components; use Illuminate\View\Component; class MyComponent extends Component { public $url; public $title; public $wrapperClass; public $paraClass; public function __construct( string $url = '', string $title = '', string $wrapperClass = '', string $paraClass = '' ) { $this->url = $url; $this->title = $title; $this->wrapperClass = $wrapperClass; $this->paraClass = $paraClass; } public function render() { return view('components.mycomponent'); } }
对应的Blade模板无需额外判断,直接使用变量:
<a href="{{ $url }}" class="{{ $wrapperClass }}"> <p class="{{ $paraClass }}">{{ $title }}</p> </a>
调用方式同样支持省略可选参数:
<x-mycomponent url="{{ $book->url }}" title="{{ $book->title }}" />
以上两种方法都不需要在模板中使用isset()或{{ $var ?? '' }},新增变量时只需在@props或组件构造函数中添加默认值即可,旧的调用代码无需修改。
内容的提问来源于stack exchange,提问作者bart
相关产品推荐
相关产品推荐

