Processar informação antes do layout

Pessoal,

Preciso antes de carregar o layout processar uma informação e passar para o mesmo em forma de variavel, assim como fazemos no controller em relação a view. Alguém sabe como fazer isso?

Na view eu faço assim:

$this->render(‘view’,array(

		'model'=>$this->loadModel($id),


	));

E uso $model na view.

Obrigado a todos.

No Yii, todas as views são tratadas como parte do controller.

Logo, nas views vc pode usar o $this, que se refere ao seu controle e isso tb se aplica as views de layouts. O Yii não repassa as variáveis da view do controller pra view de layout (Aquelas variáveis que vc passa pro render) mas vc tem acesso ao controller atravez do $this, então vc, no layout pode perfeitamente fazer uma chamada


 echo $this->minhaFuncao(); 

O problema disso é que nem todos os controlllers vão ter esta função, a não ser que vc coloque este método no Controller do protected e herde todos os outros controllers dele (da mesma forma que se usa breadcrumbs na aplicaçao gerada pelo Yiic).

Exato! Vale lembrar que breadcrumbs são widgets e o método utilizado pelo controlador é widget(http://www.yiiframework.com/doc/api/1.1/CBaseController#widget-detail)


	<?php $this->widget('zii.widgets.CBreadcrumbs', array(

		'links'=>$this->breadcrumbs,

	)); ?><

Daniel,

Valeu pela resposta. Dando uma futucada no Yii percebi exatamente isso que voce mencionou. Então fiz a seguinte técnica para resolver meus problemas:

No Controller que fica dentro de components eu criei uma variavel publica e sobrescrevi o metodo __construct. Ficou assim para aqueles que quiserem entender:

<?php

/**

  • Controller is the customized base controller class.

  • All controller classes for this application should extend from this base class.

*/

class Controller extends CController

{

/**


 * @var string the default layout for the controller view. Defaults to '//layouts/column1',


 * meaning using a single column layout. See 'protected/views/layouts/column1.php'.


 */


public &#036;layout='//layouts/column1';


/**


 * @var array context menu items. This property will be assigned to {@link CMenu::items}.


 */


public &#036;menu=array();


/**


 * @var array the breadcrumbs of the current page. The value of this property will


 * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}


 * for more details on how to specify this property.


 */


public &#036;breadcrumbs=array();





[b]public &#036;modelE = null;[/b]





public function __construct(&#036;id,&#036;module=null)


{


	parent::__construct(&#036;id,&#036;module=null);


	[b]&#036;this-&gt;modelE = Util::buscarEdicaoAtiva();[/b]


}

}

Agradeço a ajuda dos demais.

Depende como você renderiza o seu layout, no seu caso o que você fez esta certo, apenas citando opções que você pode usar depois

Você pode tambem passar para a view, como:


$this->render('minhaView',array('model'=>meuModel::model()->findAll()));

e na view faça algo como:




$this->beginContent('meuLayout',array('model'=>$model));

//seu codigo aqui

$this->endContent();



Essa opção é util quando vc precisa usar renderPartial e mesmo assim usar um layout