我正在使用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'作为初始值。
答案 0 :(得分:0)
自己找到解决方案。 Laravel视图不打算更改变量(逻辑视图分离)。因此,默认情况下,所有子视图始终在隔离范围内接收初始值。 我的解决方案是将视图编辑器与视图本身链接,并在双向模式下更新其值:
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* */ ?>