Yii 2:我可以访问另一个视图呈现的视图中的变量吗?
Yii 2: Can I access a variable in a view that's rendered by another view?
在 Yii 2 中,遵循 MVC 模式,控制器将某些变量传递给视图。但是,有时视图本身会呈现另一个视图。
例如,在默认生成的 CRUD 视图中,create.php 和 update.php 都呈现 _form 视图:
<?= $this->render('_form', [
'model' => $model,
]) ?>
我可以在 _form 中使用控制器传递给 create.php 的变量吗?
假设控制器是这样渲染的:
return $this->render( 'create', [
'model' => $model,
'myVar' => $myValue,
] );
现在我可以在 create.php 中访问 $myVar 但我不能在 _form(由 create.php 呈现)中访问。无论如何我可以访问它吗?或者我是否需要显式传递它像这样形成(在 create.php 中):
return $this->render( '_form', [
'model' => $model,
'myVar' => $myValue,
] );
需要不断传下去才能查看要访问的地方
示例:
在控制器中:
return $this->render('view1', ['var' => $value]);
在view1
中:
<?= $this->render('view2', ['var' => $var]) ?>
然后您可以在视图 view2
.
中将变量 var
作为 $var
访问
render
函数使用 extract()
将您的参数转换为局部函数上下文中的常规变量,这是文件的 include
完成的地方。这就是您 "receive" 认为这些价值观的方式。
这意味着,如果您在该视图中再次调用 render
(或任何其他变体),它将创建一个新的局部上下文,并且 "above" 中的局部变量不会那里。这就是为什么需要将变量传递给每个调用的原因,正如您自己已经弄清楚的那样。
我用它来将变量从一个视图传递到另一个视图:
视图 1:
<?= $this->render('@app/views/layouts/_view2.php', ['hideCarousel' => TRUE]) ?>
视图 2:
<?php if (!isset($hideCarousel)): ?>
...
<?php endif; ?>
在 Yii 2 中,遵循 MVC 模式,控制器将某些变量传递给视图。但是,有时视图本身会呈现另一个视图。
例如,在默认生成的 CRUD 视图中,create.php 和 update.php 都呈现 _form 视图:
<?= $this->render('_form', [
'model' => $model,
]) ?>
我可以在 _form 中使用控制器传递给 create.php 的变量吗?
假设控制器是这样渲染的:
return $this->render( 'create', [
'model' => $model,
'myVar' => $myValue,
] );
现在我可以在 create.php 中访问 $myVar 但我不能在 _form(由 create.php 呈现)中访问。无论如何我可以访问它吗?或者我是否需要显式传递它像这样形成(在 create.php 中):
return $this->render( '_form', [
'model' => $model,
'myVar' => $myValue,
] );
需要不断传下去才能查看要访问的地方
示例:
在控制器中:
return $this->render('view1', ['var' => $value]);
在view1
中:
<?= $this->render('view2', ['var' => $var]) ?>
然后您可以在视图 view2
.
var
作为 $var
访问
render
函数使用 extract()
将您的参数转换为局部函数上下文中的常规变量,这是文件的 include
完成的地方。这就是您 "receive" 认为这些价值观的方式。
这意味着,如果您在该视图中再次调用 render
(或任何其他变体),它将创建一个新的局部上下文,并且 "above" 中的局部变量不会那里。这就是为什么需要将变量传递给每个调用的原因,正如您自己已经弄清楚的那样。
我用它来将变量从一个视图传递到另一个视图:
视图 1:
<?= $this->render('@app/views/layouts/_view2.php', ['hideCarousel' => TRUE]) ?>
视图 2:
<?php if (!isset($hideCarousel)): ?>
...
<?php endif; ?>