4

在laravel框架中,我有几个嵌套视图如下

<mainview>
  loop @include <sub-view>
    loop @include <sub-sub-view>

我想保持一个计数器有多少子子视图。实际上,它变成了一个行计数器。我不确定在哪里声明/初始化这个变量($sub-sub-view-counter),以及在哪里增加它。无论我把它放在哪里,它都不能被每个视图看到和增加。

4

1 回答 1

1

这可能有点像黑客,但除非没有更好的办法出现......

您将需要一个辅助函数或一个对象(最简单的方法是将其放入模型中)。为了演示,我选择了对象变体,因为我相信它更容易处理,最重要的是更容易扩展到您的需求。这也隐式地支持多个计数器,因为值是按对象保存的(您必须跳过几圈才能通过函数获得此功能)。

class Counter
{
    private $count = 0;

    public function inc()
    {
        return ++$this->count;
    }
}

因此,对于这个特定的实现,您必须在某处创建它。您可以在包含子视图之前在父视图中的某处放置这样的行,或者使用该with()方法从 PHP 注入它。

<?php $counter = new Counter(); ?>

您像往常一样包含子视图(请记住使用include,而不是render保留$counter变量)我使用for循环进行测试,但您当然可以使用您想要的任何变体。

@for($i=0; $i<10; $i++)
    @include('home.sub')
@endfor

最后你可以在子视图中调用它

<span>{{ $counter->inc() }}</span>

您可以使用工厂轻松扩展此模型以从应用程序中的任何位置获取计数器值,但对于您的用例,这个基本变体应该足够了。

于 2013-01-16T10:05:16.207 回答