我来自symfony(v1)世界,我们有两种类型的局部渲染:partials,其加载方式如下:
@include('some.view')
和控制器,它们的行为方式完全相同,但会在命中后面运行一些控制器逻辑。因此,调用与上面相同的方法将首先转到匹配的some.view控制器,并使用它具有的逻辑进行操作。
我正在尝试用Laravel做同样的事情。基本上,我有这个:
@foreach($array as $thing)
@include('controller.like.view', array('thing' => $thing))
@endforeach
...我希望我的包含视图可以运行这样的东西(这只是一个例子,实际的代码要复杂得多,否则我只是用Blade中的if子句写它):
...
if ($thing%2) {
return 'a';
}
return 'b';
...所以我的循环中只会打印'a'或'b'。如果没有刀片模板中的大量PHP代码,最好的方法是什么?
答案 0 :(得分:1)
为什么不这样呢?
@foreach($array as $thing)
@if($thing%2)
a
@else
b
@endif
@endforeach
总的来说,在将控制器中的数据传递给视图之前,这通常是一种很好的方法。通过这种方式,视图仅用于显示数据。
您还可以编写一个小帮手功能甚至是一个完整的类(可选择Facade以便于访问)但这实际上取决于您的需求
我不确定这对你来说是最好的解决方案,但它是我唯一能想到的解决方案 尽可能多地将逻辑放在“thing”类中,然后在包含的视图中使用它。这是一个例子:
class Thing {
public function isA(){
// do the magic
return true;
}
}
查看
@if($this->isA())
a
@else
b
@endif
或者更像是你所描述的symfony中的控制器:
class Thing {
public function getVars(){
// do stuff
return array(
'all' => 'the',
'vars' => 'you',
'need' => 'in',
'the' => 'view'
);
}
}
然后包含视图
@include('item', $thing->getVars())