#Yii – Controlador desde Controlador

controlador-yii

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:

include(OperacionesController.php): failed to open stream: No such file or directory

.

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.

controlador-yii

Vista en Yii usan en backend 3 controladores

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/

6 comentarios en “#Yii – Controlador desde Controlador

  1. 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.

Deja un comentario