Laravel:包含带控制器逻辑的视图

时间:2014-11-20 16:11:02

标签: php laravel controller logic blade

我来自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代码,最好的方法是什么?

1 个答案:

答案 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

更新2

或者更像是你所描述的symfony中的控制器:

class Thing {
    public function getVars(){
        // do stuff
        return array(
                'all' => 'the',
                'vars' => 'you',
                'need' => 'in',
                'the' => 'view'
            );
    }
}

然后包含视图

@include('item', $thing->getVars())
相关问题