在Yii 2中,遵循MVC模式,控制器将某些变量传递给视图。但是,有时视图本身会呈现另一个视图。
例如,在默认生成的CRUD视图中,create.php和update.php都会呈现_form视图:
Actions
我是否可以使用控制器传递的变量来在_form?
中创建.php假设控制器呈现如下:
<?= $this->render('_form', [
'model' => $model,
]) ?>
现在我可以在create.php中访问$ myVar但是我不能在_form(由create.php呈现。无论如何我可以访问它吗?或者我是否需要明确地将它传递给这个(在create.php中):
return $this->render( 'create', [
'model' => $model,
'myVar' => $myValue,
] );
答案 0 :(得分:3)
render
- 函数使用extract()
将您的参数转换为本地函数上下文中的常规变量,这是文件的include
完成的位置。这就是你&#34;收到&#34;您视图中的那些值。
这意味着如果您在该视图中再次调用render
(或任何其他变体),它将创建一个新的本地上下文和来自&#34;上面的局部变量&#34;不会在那里。这就是为什么你需要将变量传递给每个调用,正如你已经想到的那样。
答案 1 :(得分:1)
您需要不断传递它以查看您想要访问它的位置。
示例:强>
在控制器中:
return $this->render('view1', ['var' => $value]);
在view1
:
<?= $this->render('view2', ['var' => $var]) ?>
然后,您可以在视图var
中访问变量$var
view2
。
答案 2 :(得分:-1)
我用它来将变量从一个视图传递到另一个视图:
视图1:
<?= $this->render('@app/views/layouts/_view2.php', ['hideCarousel' => TRUE]) ?>
视图2:
<?php if (!isset($hideCarousel)): ?>
...
<?php endif; ?>