Laravel:通过子视图传递动态变量

时间:2018-05-15 16:18:48

标签: php laravel counter blade

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

class PDFComposer
{

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

然后将其链接到我的服务提供商中的视图:

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'作为初始值。

1 个答案:

答案 0 :(得分:0)

自己找到解决方案。 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* */ ?>