【问题标题】:Incremented variable within nested views嵌套视图中的增量变量
【发布时间】:2013-01-16 18:22:07
【问题描述】:

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

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

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

【问题讨论】:

  • 尝试了两件事:1. View::share('var',$var) - 所有视图都可以看到 var,但我无法增加 $var 并使新值对父 2 可见. with('var'=>$var) - 同样,所有视图都可以看到 $var,但它不会被父母看到
  • 您需要嵌套级别还是包含的数量?
  • 在每个子视图上,我需要一个计数器来反映其在整个主视图中的顺序位置

标签: php laravel


【解决方案1】:

这可能有点小题大做,但除非没有更好的办法......

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

class Counter
{
    private $count = 0;

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    相关资源
    最近更新 更多