我在laravel 中有一个小的子视图/部分,它在foreach循环中加载 。我想将它保存在一个单独的视图中,因为将来我会扩展它并且我不想用代码丢弃我的主视图。但是,由于它是部分的,因此每次从磁盘加载时都会收费。
问题是:如何缓存视图并将新数据传递给它,而不必每次都从磁盘读取它?
答案 0 :(得分:1)
您可以尝试手动创建新视图。它应该工作,但请注意,这是完全未经测试的:
<?php
$view = View::make('your-partial');
foreach($data as $model){
$v = clone $view;
$v->with('data', $model);
echo $v->render();
}
?>
我只是挖得更深一些,发现上面的内容对这个问题没什么帮助。在调用render()
之前,不会读取视图文件,因此上面的代码仍然会读取每次迭代的文件。
render()
调用getContents()
,在引擎上调用get()
,然后再调用evaluatePath
:
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try
{
include $__path;
}
catch (\Exception $e)
{
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
如果你真的要减少读数,我说你唯一的选择是将部分视图代码直接放到另一个视图中。