Php Yii 2:我可以在';它是由另一个视图渲染的?

Php Yii 2:我可以在';它是由另一个视图渲染的?,php,variables,scope,views,yii2,Php,Variables,Scope,Views,Yii2,在yii2中,控制器按照MVC模式将某些变量传递给视图。但是,有时视图本身会渲染另一个视图 例如,在默认生成的CRUD视图中,create.php和update.php都呈现_表单视图: <?= $this->render('_form', [ 'model' => $model, ]) ?> 现在我可以在create.php中访问$myVar,但在_表单中无法访问(由create.php呈现)。我是否可以访问它?或者我是否需要像这样显式地将它传递到表单(在cr

在yii2中,控制器按照MVC模式将某些变量传递给视图。但是,有时视图本身会渲染另一个视图

例如,在默认生成的CRUD视图中,create.php和update.php都呈现_表单视图:

<?= $this->render('_form', [
    'model' => $model,
]) ?>
现在我可以在create.php中访问$myVar,但在_表单中无法访问(由create.php呈现)。我是否可以访问它?或者我是否需要像这样显式地将它传递到表单(在create.php中):


您需要不断地传递它以查看您想要访问它的位置

示例:

在控制器中:

return $this->render('view1', ['var' => $value]);
视图1中

<?= $this->render('view2', ['var' => $var]) ?>


然后,您可以在视图
view2
中以
$var
的形式访问变量
var
render
-函数使用
extract()
将参数转换为本地函数上下文中的常规变量,在本地函数上下文中执行文件的
include
。这就是“接收”的方式在你看来,这些价值观


这意味着,如果在该视图中再次调用
render
(或任何其他变体),它将从“上面”创建一个新的局部上下文和局部变量不会出现。这就是为什么要求您将变量传递给每个调用的原因,正如您自己已经了解的那样。

我使用它将变量从一个视图传递到另一个视图:

视图1:

<?= $this->render('@app/views/layouts/_view2.php', ['hideCarousel' => TRUE]) ?>

视图2:

<?php if (!isset($hideCarousel)): ?>
    ...
<?php endif; ?>

...

这是一个有用的添加和解释。我会接受这个答案,因为这个答案有一个解释。我想我需要在每次调用时传递它,但这个也解释了原因。谢谢!太糟糕了,没有一个选项可以像这样简单地传递变量。
$This->render(“'u partial',$This->variables)
或类似的东西。其中
$this
指的是
\yii\web\View
。你会认为视图知道他自己传递的变量,对吧?如果你不介意拖拽
\u服务器
\u全局
等东西,你总是可以使用
get\u defined\u vars()
。它还包括本地范围内的所有内容。不过,我会非常谨慎地使用它,因为它会对内存使用产生影响。
<?= $this->render('@app/views/layouts/_view2.php', ['hideCarousel' => TRUE]) ?>
<?php if (!isset($hideCarousel)): ?>
    ...
<?php endif; ?>