Размещение исходных файлов
Поместить их под /protected/components
— это естественный выбор. Если позже вы разработаете более общие классы, которые можно повторно использовать в проектах, вы можете подумать о том, чтобы поместить их в отдельный каталог.
Именование и структура каталогов
Это будет зависеть от масштаба вашего приложения. Если у вас не так много компонентов (скажем, менее 20), то ИМХО вам не нужна какая-либо структура каталогов, каталог 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...
),
);
person
Jon
schedule
17.09.2011