Вызов функции в другом контроллере в Yii - PullRequest
7 голосов
/ 26 октября 2010

Я создал 2 контроллера в своем приложении Yii: FirstController.php и SecondController.php в пути контроллера по умолчанию.

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();
  }
}

Когда я пытаюсь выполнить exampleFunc() в SecondController, Yii выдает ошибку:

YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory

Вызов FirstController::returnFunc() аналогичным образом не работает.

IНовичок в ООП и Yii Framework.В чем проблема?

Ответы [ 3 ]

11 голосов
/ 26 октября 2010

Я решил эту проблему.Автозагрузчик не загружает контроллеры.

Это было в config/main.php:

'import' => array(
    'application.models.*',
    'application.components.*',
),

Все с этим работают:

'import' => array(
    'application.models.*',
    'application.components.*',
    'application.controllers.*',
),
4 голосов
/ 06 апреля 2013
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
2 голосов
/ 27 октября 2010

Когда вы создаете проект Yii, каждый из ваших контроллеров расширяет класс Controller, а этот класс расширяет встроенный класс Yii CController.

Это хорошо, потому что Controller - это класс в вашем приложении (он можетнаходиться в папке компонентов).

Если вы хотите, чтобы метод был доступен для обоих ваших контроллеров, поместите этот метод в класс Controller, и поскольку они оба расширяют его.У них обоих будет доступ.Просто не забудьте объявить его публичным или защищенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...