Как расширить классы фреймворка Yii и где разместить файлы - PullRequest
4 голосов
/ 17 сентября 2011

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

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

Верно?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2011

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

Размещение их в /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...
   ),
);
0 голосов
/ 17 сентября 2011

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

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

class MyNewClass extends CFrameworkClass
{
    //All your stuff

} 

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

...