如何将变量传递给布局?

时间:2011-08-14 17:20:48

标签: php yii

我知道如何将变量从控制器传递到视图中:

$this->render('view_name', array('variable_name'=>'variable_value'));

但是我想将一些变量传递给布局。控制器和布局之间的唯一连接似乎是控制器类中的public $ layout属性,如下所示:

public $layout='//layouts/column2';

但是,我没有看到将变量传递给它的方法吗?

5 个答案:

答案 0 :(得分:13)

或者,您可以在Controller中添加属性,例如

class SiteController extends CController {

    public $myvar;
//...

然后在布局中输出它(// layouts / column2)

echo isset($this->myvar) ? $this->myvar : '';

答案 1 :(得分:6)

我似乎并没有真正根据我所知道的那样轻松做到这一点,所以如果你依靠它来传递大量数据,你可能会想到一种不同的方式来设置你的应用

你能做到的几种方法是通过

使用Yii参数
Yii::app()->params['myvar'] = $mixed;

您可以在控制器中设置并在布局中进行访问。否则,您可以使用常规的PHP全局变量,以及所需的所有问题。

在您的控制器中,您可以执行以下操作:

global $testvar;
$testvar = 'hello';

并在布局中:

echo $GLOBALS['testvar'];

(即使它不在函数中,你仍然需要通过GLOBALS检索它。)

您可以通过这种方式传递对象以获得更多结构化数据,但您仍在使用全局变量。另一种可能更不可取的方法是通过会话var,例如Yii::app()->session['myvar']或Yii“flash message”。

答案 2 :(得分:4)

在控制器中传递变量,然后在VIEW中(尚未布局) 创建

$this->params['myvar'] = 'hello';

现在在布局中,您可以使用

访问整个数组
echo $this->params['myvar'];

希望这会对你有所帮助。

答案 3 :(得分:0)

在Yii2中进行了多组调试后,我发现布局文件中可以访问的唯一变量(不包括全局变量)是 _file _ (当前布局文件的路径)和 _params_ (包含变量 content 的数组,它是从传递给控制器​​的文件缓冲的HTML输出)。 除了 @ldg (我认为最有用和最有用,但资源支出)和 @Petra Barus 提供的答案。
我还提出了一个很好的解决方案,将布局划分为显式文件并在渲染文件中调用它们:

echo $this->renderPhpFile(Yii::getAlias('@app/views/layouts/somelayout.php'), [
    'var' => $variableThatIsAccessibleInRenderedFile,
]);

答案 4 :(得分:-1)

您可以从控制器执行以下操作:

$this->render('/mail/registration',array('url'=>$url, 'description'=>'some description'));

并从您的视图中访问变量,如下所示:

<h3><?php echo $url; ?></h3>

这是你的答案;您可以从布局中访问这些相同的变量,如下所示:

<h3><?php echo $data['url']; ?></h3>