我知道如何将变量从控制器传递到视图中:
$this->render('view_name', array('variable_name'=>'variable_value'));
Run Code Online (Sandbox Code Playgroud)
但是我想把一些变量传递给布局.控制器和布局之间的唯一连接似乎是控制器类中的public $ layout属性,如下所示:
public $layout='//layouts/column2';
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到将变量传递给它的方法?
Pet*_*rus 14
或者,您可以在Controller中添加属性,例如
class SiteController extends CController {
public $myvar;
//...
Run Code Online (Sandbox Code Playgroud)
然后在布局中输出它(// layouts/column2)
echo isset($this->myvar) ? $this->myvar : '';
Run Code Online (Sandbox Code Playgroud)
我似乎并没有真正根据我的意思轻松做到这一点,所以如果你依靠它来传递大量数据,你可能想要考虑一种不同的方式来设置你的应用程序.
你能做到的几种方法是使用Yii params via
Yii::app()->params['myvar'] = $mixed;
Run Code Online (Sandbox Code Playgroud)
您可以在控制器中设置并在布局中访问.否则,您可以使用常规的PHP全局变量,以及所需的所有问题.
在您的控制器中,您可以执行以下操作:
global $testvar;
$testvar = 'hello';
Run Code Online (Sandbox Code Playgroud)
并在布局中:
echo $GLOBALS['testvar'];
Run Code Online (Sandbox Code Playgroud)
(即使它不在函数中,你仍然需要通过GLOBALS检索它.)
您可以通过这种方式传递对象以获得更多结构化数据,但您仍在使用全局变量.另一种可能甚至不太理想的方法是通过会话var,例如,Yii::app()->session['myvar']或Yii" flash消息 ".
小智 -2
从你的控制器你可以做这样的事情:
$this->render('/mail/registration',array('url'=>$url, 'description'=>'some description'));
Run Code Online (Sandbox Code Playgroud)
并从您的视图中访问变量,如下所示:
<h3><?php echo $url; ?></h3>
Run Code Online (Sandbox Code Playgroud)
这是你的答案;您可以从布局中访问这些相同的变量,如下所示:
<h3><?php echo $data['url']; ?></h3>
Run Code Online (Sandbox Code Playgroud)