Как расширить классы среды Yii и место для размещения файлов

Я хочу расширить некоторые встроенные классы фреймворка, но есть некоторые моменты, о которых я не понимаю:

  1. Предполагаю, что я должен поместить свои классы под свою папку с компонентами, это подходящее место?
  2. Должен ли я назвать классы, такие как ClassName.php и файлы типа ClassName.php ?
  3. Как мне наследовать? По умолчанию включены пути, которые не включают саму структуру. Я предполагаю, что есть встроенный способ сделать это без меня, меняя включаемый путь / начало игры с функцией автозагрузки или просто жесткий код, включенный в мой код.

Правильно?

Размещение исходных файлов

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

Структура именования и каталогов

Это будет зависеть от масштаба вашего приложения. Если у вас нет большого количества компонентов (скажем, до 20), тогда IMHO вам не нужна структура каталогов, каталог components хорош для всех из них. Другой практический подход состоит в том, чтобы поместить ваши бизнес-компоненты в один каталог и ваши компоненты HTML в другой (например, widgets ).

Включение родительских классов

В конфигурационном файле должен быть такой раздел:

 // autoloading model and component classes 'import'=>array( 'application.models.activerecord.*', 'application.models.forms.*', 'application.components.*', 'application.classes.*', // etc ), 

Этот раздел фактически приводит к тому, что CModule::setImport на вашем экземпляре приложения для регистрации классов, которые могут быть автоматически загружены. Если вы хотите расширить эти классы, вам не нужно ничего делать.

Если некоторые из ваших компонентов зависят от классов Yii, которые не импортируются, как указано выше, вам нужно будет явно импортировать их с помощью Yiibase::import перед объявлением вашего класса. Например:

 Yii::import('zii.widgets.jui.CJuiSlider'); class MySlider extends CJuiSlider { // class contents here } 

Регистрация псевдонимов для путей

Если вы хотите создать свои собственные псевдонимы для путей импорта (например, иметь путь myapp.components вы можете ссылаться при импорте классов), вы можете сделать это с помощью Yiibase::setPathOfAlias . Хорошим местом для этого является верхняя часть вашего файла конфигурации:

 <?php Yii::setPathOfAlias('myapp.components','components/my/'); // This is the main Web application configuration. Any writable // CWebApplication properties can be configured here. return array( // your whole app configuration is here, and you can now do this: 'import'=>array( // ...other imports... 'myapp.components.*', // ...other imports... ), ); 

Если вы хотите создать дочерний класс класса в yii-Framework, да, вы можете поместить свой файл определения класса в project/protected/components . Зависит от лучших практик, которые вы хотите использовать (т. Е. Создаете ли вы десятки пользовательских классов или только один или два, которые расширяют классы FW), но размещение вашего файла непосредственно в компонентах должно быть хорошо с точки зрения организации.

Чтобы наследовать, вы можете просто создать свой файл в следующих строках:

 class MyNewClass extends CFrameworkClass { //All your stuff } 

Обратите внимание, что по соглашению классы фреймворка yii имеют перед ними «C» (т. Е. CController), я не добавляю «C» там (CFramwork ..) по любой другой причине, кроме как придерживаясь соглашения.