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
[sourcecode language=»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;
}
}
[/sourcecode]
.
PublicoController.php
[sourcecode language=»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;
}
}
[/sourcecode]
.
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.
[sourcecode language=»php»]
<?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 ));
}
}
[/sourcecode]
.
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
[sourcecode language=»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>
[/sourcecode]
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!