Функция вызова в другом контроллере в Yii

StackOverflow https://stackoverflow.com/questions/4022483

  •  26-09-2019
  •  | 
  •  

Вопрос

Я создал 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() Во второмконтероллере 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() Точно так же не работай.

Я Newbee в OOP и Yii Framework. В чем проблема?

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top