如何解决具有动态属性的 Laravel 组件
我正在使用 Laravel 并使用相关联的 PHP 类创建组件。我将以我的用例为例:
视图/P.PHP
class P {
public function render() {
return view('views.p');
}
}
resources/views/p.blade.PHP
<p class="pb-4"></p>
现在,我可以在我的应用程序中使用这个组件和类似的组件。例如:
some.blade.PHP
<x-h1>Title</x-h1>
<x-p>Hello world</x-p>
请注意,我还包含了一个 <x-h1>
。这也可以有类似的底部填充。
some.blade.PHP
<x-h1 no-margin>Title</x-h1>
<x-p no-margin>Hello world</x-p>
但现在我需要定义在两个 PHP 类中执行此操作的逻辑。我的逻辑包含在父类或特征中,但我遇到的问题是,对于每个组件,我需要在构造函数中定义属性,如下所示:
视图/P.PHP
class P {
use noMarginModifier;
public $noMargin;
public function __constructor($noMargin = false) {
$this->noMargin = $noMargin;
// do something from noMarginModifier trait
}
public function render() {
return view('views.p');
}
}
视图/H1.PHP
class H1 {
use noMarginModifier;
public $noMargin;
public function __constructor($noMargin = false) {
$this->noMargin = $noMargin;
// do something from noMarginModifier trait
}
public function render() {
return view('views.h1');
}
}
对于这个例子来说是可以的,但是,我很快就会扩展属性的数量,可能有 no-margin
、higlight
等等。
视图/H1.PHP
class H1 {
use modifier;
public $modifiers;
public function __constructor($modifiers = []) {
$this->modifiers = $modifiers;
// do something with modifiers
}
public function render() {
return view('views.h1');
}
}
这个解决方案的唯一问题是我必须像这样使用组件:
<x-h1 :modifiers="['no-margin' => true]"></h1>
解决方法
我有一个解决方案,但由于提到的注意事项,感觉有点古怪,就是访问 Laravel docs 中提到的组件类中的属性和插槽。
这导致了一个类:
视图/H1.php
class H1 {
use modifier;
public function render()
{
return function (array $data) {
// no-margin exists here
$data['attributes']['no-margin'];
// do something with modifiers
return 'components.h1';
};
}
}
但是,我在模板中看到的警告是:
resources/vies/h1.blade.php
{{ $attributes->merge(['no-margin' => 'anotherValue']) }}
当我合并上述属性时。然后更改不会反映在模板中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。