función de llamada en otro controlador en Yii
Pregunta
He creado 2 controladores en mi aplicación Yii:. FirstController.php y SecondController.php en ruta controlador por defecto
FirstController.php:
<?php
class FirstController extends Controller {
public static function returnFunc() { return 'OK'; }
}
SecondController.php:
<?php
class SecondController extends Controller {
public function exampleFunc() {
$var = First::returnFunc();
}
}
Cuando intento ejecutar exampleFunc()
en SecondController, Yu tirar el error:
YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory
Llamando FirstController::returnFunc()
no funcionan de manera similar.
Estoy newbee en programación orientada a objetos y el marco Yu. ¿Cuál es el problema?
Solución
He resuelto este problema. El cargador automático no se carga controladores.
Fue en config/main.php
:
'import' => array(
'application.models.*',
'application.components.*',
),
Todo el trabajo con esto:
'import' => array(
'application.models.*',
'application.components.*',
'application.controllers.*',
),
Otros consejos
class ServiceController extends Controller
{
public function actionIndex()
{
Yii::import('application.controllers.back.ConsolidateController'); // ConsolidateController is another controller in back controller folder
echo ConsolidateController::test(); // test is action in ConsolidateController
class ServiceController extends Controller
{
public function actionIndex()
{
Yii::import('application.controllers.back.CservicesController');
$obj =new CservicesController(); // preparing object
echo $obj->test(); exit; // calling method of CservicesController
Cuando se crea un proyecto de Yii, cada uno de los controladores de extender la clase del controlador, y que se extiende la clase construido en CController clase Yii.
Esto es bueno porque controlador es una clase dentro de la aplicación (que se puede encontrar en los componentes de la carpeta).
Si quieres un método que sea accesible por ambos de sus controladores, puesto que el método de la clase controlador, y ya que tanto extenderlo. Las dos tendrán acceso. Sólo asegúrese de declarar que ya sea pública o protegida.