la funzione di chiamata in un altro controllore in Yii
Domanda
Ho creato 2 controller nella mia applicazione Yii:. FirstController.php e SecondController.php nel percorso controller di default
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();
}
}
Quando provo ad eseguire exampleFunc()
in SecondController, Yii gettare l'errore:
YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory
Calling FirstController::returnFunc()
simile non funzionano.
Sono newbee in OOP e framework Yii. Qual è il problema?
Soluzione
Ho risolto questo problema. Il caricatore automatico non carica i controller.
E 'stato nel config/main.php
:
'import' => array(
'application.models.*',
'application.components.*',
),
Tutti i lavori con questo:
'import' => array(
'application.models.*',
'application.components.*',
'application.controllers.*',
),
Altri suggerimenti
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
Quando si crea un progetto Yii, ogni controller di estendere la classe Controller, e che classe estende la classe costruito in Yii CController.
Questo è bello perché Controller è una classe all'interno dell'applicazione (si può trovare nei componenti cartella).
Se si desidera un metodo per essere accessibile da entrambi i controller, mettere quel metodo nella classe Controller, e poiché entrambi estenderlo. Avranno accesso sia. Basta fare in modo di dichiarare che sia pubblico o protetto.