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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top