Yii - Наследование От Пользовательского Класса Контроллера - Не Найдено


class SomeController extends Controller
{

        public function actionIndex() {
                echo 'This is some controller';
        }
}


class AnotherController extends SomeController
{

        public function actionIndex() {
                echo 'This is another controller';
        }
}

Это работает:

index.php?r=some

Но...

index.php?r=another

Говорит:

Предупреждение PHP

Включить(SomeController.php ): не удалось открыть поток: Нет такого файла или каталога

Оба файла находятся в

test\protected\controllers\

Кстати, в прошлом я также пытался использовать генератор контроллера Gii с "someController" в качестве базового класса...

Там было сказано:

The controller has been generated successfully. You may try it now.

Generating code using template 
"C:\xampp\htdocs\yii\framework\gii\generators\controller\templates\default"...
generated controllers\YetAnotherController.php
generated views\yetAnother\index.php
done!

Когда я нажал "попробуйте сейчас", он также сказал:

Предупреждение PHP

Включить(SomeController.php ): не удалось открыть поток: Нет такого файла или каталога

 5
Author: miku, 2013-01-04

2 answers

Редактировать:

Классы внутри защищенные/контроллеры не загружаются автоматически, поэтому вам придется импортировать файл родительского класса перед расширением из него:

В AnotherController.php:

Yii::import('application.controllers.SomeController');
public class AnotherController extends SomeController {
    // ...
}

Если вам также необходимо получить доступ к базовому классу по URL-адресу, вы можете использовать описанный выше метод. В противном случае вы можете поместить свой базовый класс в защищенный/компоненты, как вы уже поняли.


Автоматическая загрузка Yii работает только тогда, когда у вас есть то же имя файла, что и у класса, содержащегося в файле. Значение class SomeController должно быть в пределах SomeController.php файл.

Внесите эти изменения, и это должно сработать.

Полезная вики-страница: Понимание вспомогательных классов автоматической загрузки и вспомогательных функций.

Направляющая ссылка:

Файлы классов должны быть названы в честь открытого класса, который они содержат.

 11
Author: bool.dev, 2013-01-04 03:35:01

Чтобы расширить любой класс, просто перейдите в файл конфигурации и добавьте класс в раздел импорта

'import' => array('application.controllers.SomeController')

Это сделает его доступным во всем приложении без явного импорта.

 3
Author: kishor kumar yadav, 2013-01-11 15:17:23