【发布时间】:2021-08-19 09:22:45
【问题描述】:
我有一个包含$attributes 的刀片组件;当组件从另一个刀片模板调用但从控制器通过view() 调用时,这将是一个属性包,$attributes 未定义!如何从控制器以$attributes 的形式传递数据?
组件:sample
<div {{ $attributes->except('content') }}>{{ $content }}</div>
模板:效果很好。
...
<x-sample class="test" content="test"/>
...
控制器:错误未定义的变量 $attributes
$attributes = ['class' => 'test', 'content' => 'test'];
view('components.sample', $attributes)->render();
view('components.sample', ['attributes' => $attributes])->render();
view('components.sample')->with($attributes)->render();
更新(解决方案):
有效:
view('components.sample', [
'prop1' => '...',
'prop2' => '...',
'attributes' => new ComponentAttributeBag(['attr1' => '...', 'attr2' => '...']),
])->render();
【问题讨论】:
-
您为什么要尝试将组件呈现为来自控制器的视图?这种方式违背了组件的意义
-
数据嵌套复杂,我更喜欢把逻辑放在控制器中,在视图层使用模板引擎。
-
复杂用户界面的诀窍是使用简化它的东西。如果事情真的变得复杂,我会建议研究 VUE.js。它并不完美,但比您当前的解决方案更好(尝试)
-
似乎可以通过组件 php 类。我认为可能有一个直接的解决方案;)
标签: laravel laravel-blade laravel-8