【问题标题】:Laravel: passing dynamic variable thru sub-viewsLaravel:通过子视图传递动态变量
【发布时间】:2018-05-15 16:18:48
【问题描述】:

我正在使用 Laravel 5.1,需要将动态计数器从主视图传递给子视图。每个子视图应使用前一个子视图的计数器值。但问题是每个子视图从头开始初始化计数器。 我正在使用视图作曲家来启动计数器:

class PDFComposer
{

    public function compose(View $view)
    {
        $view->with('pdfCount', 0);
    }
}

然后将其链接到我的 Service Provider 中的视图:

public function boot()
{
    view()->composer('summary', PDFComposer::class);
}

然后我有 4 个答案子视图的摘要视图:

@include('answer', ['answers' => $group0])
@include('answer', ['answers' => $group1])
@include('answer', ['answers' => $group2])
@include('answer', ['answers' => $group3])

每个子视图根据某些标准将计数器更新一。我希望下一个“答案”子视图使用上一个“答案”子视图中的最后一个计数器值。但是每个视图都使用'0'作为初始值。

【问题讨论】:

  • 通过在前面加上一个&符号通过引用传递计数器将使所有子视图看到相同的变量。
  • Oluwafemi,我已经试过了。它不能以这种方式工作。计数器从每个子视图的“0”开始。

标签: php laravel counter blade


【解决方案1】:

自己找到了解决方案。 Laravel 视图不打算更改变量(逻辑视图分离)。因此,默认情况下,所有子视图总是在隔离范围内接收初始值。 我的解决方案是将视图编辑器与视图本身链接,并以双向模式更新 еру 值:

  • 将作曲家链接到子视图,而不是 ServiceProvider (1*) 中的主视图
  • 更新视图作曲家以使用不固定的初始值,而是获取值
    从查看共享数据 (2*)
  • 更改子视图以在渲染结束时更新变量 (3*)

.

public function boot()
{
    view()->composer('answer', PDFComposer::class); // 1*
}

.

namespace App\Views\Composers;

use Illuminate\View\View;

class PDFComposer
{

    private $view;

    public function compose(View $view)
    {
        $this->setView($view);
        $this->view->with('pdfCount', $this->shared('pdfCount', 0)); // 2*
    }

    private function setView(View $view)
    {
        $this->view = $view;
    }

    private function shared($key, $default = null)
    {
        $sharedData = $this->view->getFactory()->getShared();
        return (isset($sharedData[$key]) ? $sharedData[$key] : $default);
    }
}

.

{{ some_blade_code_here }}
<?php view()->share('pdfCount', $pdfCount); /* 3* */ ?>

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多