Anruffunktion in einen anderen Controller in Yii
Frage
Ich habe erstellt 2 Controller in meiner Yii-Anwendung. FirstController.php und SecondController.php in Standard-Controller Pfad
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();
}
}
Wenn ich versuche, exampleFunc()
in SecondController auszuführen, Yü die Fehler werfen:
YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory
Beim FirstController::returnFunc()
ähnlich funktioniert nicht.
Ich bin newbee in OOP und Yü Rahmen. Was ist das Problem?
Lösung
Ich habe dieses Problem gelöst. Der Autoloader nicht-Controller geladen werden.
Es war in config/main.php
:
'import' => array(
'application.models.*',
'application.components.*',
),
Alle Arbeiten mit dieser:
'import' => array(
'application.models.*',
'application.components.*',
'application.controllers.*',
),
Andere Tipps
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
Wenn Sie ein Yü-Projekt erstellen, jede Ihres Controller erweitert die Klasse-Controller, und diese Klasse erstreckt sich in Yü Klasse CController die gebaut.
Das ist schön, weil Regler eine Klasse in Ihrer Anwendung ist (es kann in den Ordnern Komponenten zu finden).
Wenn Sie eine Methode wollen durch Ihre beiden Controllern zugänglich sein, setzen Sie diese Methode in der Klasse-Controller, und da sie beide es verlängern. Sie werden beide Zugriff haben. So stellen Sie sicher zu erklären, es entweder öffentlich oder geschützt.