En esta entrada practicaremos hacer llamados a controladores específicos y sus acciones, desde otros controladores en los que sea requerido.
La practica consiste en lo siguiente: Necesitamos desde un controlador ( PrincipalController.php ), usar acciones que se encuentran en otros dos controladores (OperacionesController.php y PublicoController.php respectivamente).
.
OperacionesController.php
<?php class OperacionesController extends Controller{ public function actionSumar($a,$b){ if( is_null($a) && is_null($b) ){ $a= 6; $b= 7; } $resultado = $a + $b; if(!is_numeric($a) || !is_numeric($b)) throw new CHttpException(404,'Epa no es un dato numerico.'); else return $resultado; } }
.
PublicoController.php
<?php class PublicoController extends Controller{ public function actionCapturarVisitante($aleatorio){ $visitante = "<br> IP:{$_SERVER["REMOTE_ADDR"]}<br>"; $visitante .= "HOST:{$_SERVER["REMOTE_PORT"]}<br>"; $visitante .= "URI:{$_SERVER["REQUEST_URI"]}<br>"; $visitante .= "Fecha: ".date("d-m-Y h:i:s")."<br>"; $visitante .= "Navegador: {$_SERVER["HTTP_USER_AGENT"]}<br>"; $visitante .= "Identificador: {$aleatorio}<br><br>"; return $visitante; } }
.
PrincipalController.php
En este controlador usamos las acciones de los controladores anteriores. Al controlador OperacionesController.php y sus acciones accederemos indicando que nuestro controlador extiende del mismo (linea 3), recordando y entendiendo que al final de cuentas un controlador no es mas que una clase y sus acciones los métodos de esta clase (linea 7). Ahora las acciones del controlador PublicoController.php las capturaremos indicando: el controlador objetivo + la acción objetivo + los parámetros si los requiere como lo indica la linea 9.
<?php class PrincipalController extends OperacionesController{ public function actionMivista(){ $suma = $this->actionSumar(11,3); $visitante = PublicoController::actionCapturarVisitante(rand(10000,99999)); $this->render('mivista', array( 'suma' => $suma, 'visitante' => $visitante )); } }
.
En el archivo protected/config/main.php especificar que se importaran todos los controladores agregando la siguiente linea en el bloque import: ‘application.controllers.*’
De lo contrario es probable que experimenten este tipo de errores:
.
Vista generada desde PrincipalController.php
protected/views/principal/mivista.php
<h1>Controlador desde controlador en Yii</h1> <b><?php echo 'El resultado de la suma es: '.$suma ?> </b> <b><br /><br />Datos del visitante: </b><?php echo $visitante ?> <div> <?php echo CHtml::submitButton('Enviar'); ?> </div>
Finalmente nuestra vista mostrara información que se genero y proceso desde tres controladores distintos.

Existen otros medios de realizar tareas iguales o similares, una u otra forma serán mas eficientes o mas acordes según el entorno, variables y las propias reglas de negocio que regulen su desarrollo en yii.
Lecturas muy recomendadas:
http://www.yiiframework.com/doc/guide/1.1/es/basics.controller
http://yiiframework.wordpress.com/2009/01/21/basico-modelo-vistas-y-controladoresmvc/
http://blog.jorgeivanmeza.com/2010/01/los-controladores-en-yii-2/
Mmm excelente Lenin gran aporta eso ayuda muchísimo más especifico imposible!!
Dale play!! también hay algo que se llama runcontroller que esta relacionado con http://www.yiiframework.com/doc/api/1.1/CWebApplication#createController-detail
Aspiro esta entrada sea de utilidad para incrementar la eficiencia en sus desarrollos en Yii. Saludos!!
Thanks for providing information about controller form in Yii framework. Basically Yii is a fast, secure, high performance PHP framework for developing web 2.0 applications, and The Yii Development is top class, affordable and offer several features to build unique and quality applications.
The Controller is a fundamental part of Yii, Greetings
Funciona!! Gran aporte. Gracias
Excelente! Saludos!