Yii 2:我可以在另一个视图呈现的视图中访问变量吗?

时间:2015-05-15 10:29:47

标签: php variables scope views yii2

在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,
] );

3 个答案:

答案 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; ?>