CModule
| Пакет | system.base |
|---|---|
| Наследование | абстрактный класс CModule » CComponent |
| Подклассы | CApplication, CWebModule |
| Исходный код | framework/base/CModule.php |
CModule главным образом управляет компонентами приложения и подмодулями.
Свойства public
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| basePath | строка | Возвращает корневой каталог модуля. | CModule |
| behaviors | массив | поведения, которые должны быть присоединены к модулю. | CModule |
| components | массив | Возвращает компоненты приложения. | CModule |
| id | строка | Возвращает идентификатор модуля. | CModule |
| modulePath | строка | Возвращает каталог, содержащий модули приложения. | CModule |
| modules | массив | Возвращает конфигурацию установленных модулей. | CModule |
| params | CAttributeCollection | Возвращает пользовательские параметры. | CModule |
| parentModule | CModule | Возвращает родительский модуль. | CModule |
| preload | массив | идентификаторы компонентов приложения, которые должны быть предварительно загружены. | CModule |
Методы public
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает метод с указанным именем, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CModule |
| __get() | Магический метод-получатель. | CModule |
| __isset() | Проверяет, является ли значение свойства нулевым. | CModule |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Присоединяет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| configure() | Настраивает модуль с указанной конфигурацией. | CModule |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединенное поведение. | CComponent |
| disableBehaviors() | Отключает все присоединенные поведения к этому компоненту. | CComponent |
| enableBehavior() | Включает присоединенное поведение. | CComponent |
| enableBehaviors() | Включает все присоединенные к этому компоненту поведения. | CComponent |
| evaluateExpression() | Вычисляет выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| getBasePath() | Возвращает корневой каталог модуля. | CModule |
| getComponent() | Извлекает указанный компонент приложения. | CModule |
| getComponents() | Возвращает компоненты приложения. | CModule |
| getEventHandlers() | Возвращает список присоединенных обработчиков событий для события. | CComponent |
| getId() | Возвращает идентификатор модуля. | CModule |
| getModule() | Извлекает указанный модуль приложения. | CModule |
| getModulePath() | Возвращает каталог, содержащий модули приложения. | CModule |
| getModules() | Возвращает конфигурацию установленных модулей. | CModule |
| getParams() | Возвращает пользовательские параметры. | CModule |
| getParentModule() | Возвращает родительский модуль. | CModule |
| hasComponent() | Проверяет, существует ли компонент с указанным именем. | CModule |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли присоединенные обработчики к событию с указанным именем. | CComponent |
| hasModule() | Возвращает значение, указывающее, установлен ли указанный модуль. | CModule |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| raiseEvent() | Вызывает событие. | CComponent |
| setAliases() | Определяет корневые псевдонимы. | CModule |
| setBasePath() | Устанавливает корневой каталог модуля. | CModule |
| setComponent() | Добавляет компонент под управление модуля. | CModule |
| setComponents() | Устанавливает компоненты приложения. | CModule |
| setId() | Устанавливает идентификатор модуля. | CModule |
| setImport() | Устанавливает псевдонимы, используемые в модуле. | CModule |
| setModulePath() | Устанавливает каталог, содержащий модули приложения. | CModule |
| setModules() | Настраивает подмодули этого модуля. | CModule |
| setParams() | Устанавливает пользовательские параметры. | CModule |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| init() | Инициализирует модуль. | CModule |
| preinit() | Предварительно инициализирует модуль. | CModule |
| preloadComponents() | Загружает статические компоненты приложения. | CModule |
Подробное описание свойств
basePath свойство
public string getBasePath()
public void setBasePath(string $path)
Возвращает корневой каталог модуля.
behaviors свойство
public array $behaviors;
Поведения, которые должны быть присоединены к модулю. Поведения будут присоединены к модулю при вызове init. Обратитесь к CModel::behaviors для получения информации о том, как указать значение этого свойства.
components свойство
public array getComponents(boolean $loadedOnly=true)
public void setComponents(array $components, boolean $merge=true)
Возвращает компоненты приложения.
id свойство
public string getId()
public void setId(string $id)
Возвращает идентификатор модуля.
modulePath свойство
public string getModulePath()
public void setModulePath(string $value)
Возвращает каталог, содержащий модули приложения.
modules свойство
public array getModules()
public void setModules(array $modules, boolean $merge=true)
Возвращает конфигурацию установленных модулей.
params свойство
public CAttributeCollection getParams()
public void setParams(array $value)
Возвращает пользовательские параметры.
parentModule свойство только для чтения
public CModule getParentModule()
Возвращает родительский модуль.
preload свойство
public array $preload;
Идентификаторы компонентов приложения, которые должны быть предварительно загружены.
Подробное описание методов
__construct() метод
public void __construct(string $id, CModule $parent, mixed $config=NULL) | ||
| $id | string | идентификатор этого модуля |
| $parent | CModule | родительский модуль (если есть) |
| $config | смешанное | настройка модуля. Она может быть массивом или путем к PHP-файлу, возвращающему массив настроек. |
public function __construct($id,$parent,$config=null)
{
$this->_id=$id;
$this->_parentModule=$parent;
// set basePath as early as possible to avoid trouble
if(is_string($config))
$config=require($config);
if(isset($config['basePath']))
{
$this->setBasePath($config['basePath']);
unset($config['basePath']);
}
Yii::setPathOfAlias($id,$this->getBasePath());
$this->preinit();
$this->configure($config);
$this->attachBehaviors($this->behaviors);
$this->preloadComponents();
$this->init();
}
Конструктор.
__get() метод
public mixed __get(string $name) | ||
| $name | строка | имя компонента приложения или свойства |
| {возврат} | смешанное | значение свойства с указанным именем |
public function __get($name)
{
if($this->hasComponent($name))
return $this->getComponent($name);
else
return parent::__get($name);
}
Магический метод получения. Этот метод переопределён для поддержки доступа к компонентам приложения, например, для чтения свойств модуля.
__isset() метод
public boolean __isset(string $name) | ||
| $name | строка | имя свойства или имя события |
| {возврат} | булево | является ли значение свойства нулевым |
public function __isset($name)
{
if($this->hasComponent($name))
return $this->getComponent($name)!==null;
else
return parent::__isset($name);
}
Проверяет, является ли значение свойства нулевым. Этот метод переопределяет родительскую реализацию, проверяя, загружен ли указанный компонент приложения.
configure() метод
public void configure(array $config) | ||
| $config | массив | массив конфигурации |
public function configure($config)
{
if(is_array($config))
{
foreach($config as $key=>$value)
$this->$key=$value;
}
}
Настраивает модуль с указанной конфигурацией.
getBasePath() метод
public string getBasePath() | ||
| {возврат} | строка | корневой каталог модуля. По умолчанию — каталог, содержащий класс модуля. |
public function getBasePath()
{
if($this->_basePath===null)
{
$class=new ReflectionClass(get_class($this));
$this->_basePath=dirname($class->getFileName());
}
return $this->_basePath;
}
Возвращает корневой каталог модуля.
getComponent() метод
public IApplicationComponent getComponent(string $id, boolean $createIfNull=true) | ||
| $id | строка | идентификатор компонента приложения (регистрозависимый) |
| $createIfNull | булево | создавать компонент, если он ещё не существует. |
| {возврат} | IApplicationComponent | экземпляр компонента приложения, null, если компонент отключён или не существует. |
public function getComponent($id,$createIfNull=true)
{
if(isset($this->_components[$id]))
return $this->_components[$id];
elseif(isset($this->_componentConfig[$id]) && $createIfNull)
{
$config=$this->_componentConfig[$id];
if(!isset($config['enabled']) || $config['enabled'])
{
Yii::trace("Loading \"$id\" application component",'system.CModule');
unset($config['enabled']);
$component=Yii::createComponent($config);
$component->init();
return $this->_components[$id]=$component;
}
}
}
Получает указанный компонент приложения.
См. также
getComponents() метод
public array getComponents(boolean $loadedOnly=true) | ||
| $loadedOnly | булево | возвращать только загруженные компоненты. Если это значение ложно, то будут возвращены все компоненты, указанные в конфигурации, загруженные или нет. Загруженные компоненты будут возвращены как объекты, а не загруженные — как массивы конфигурации. Этот параметр доступен с версии 1.1.3. |
| {возврат} | массив | компоненты приложения (индексированные по их идентификаторам) |
public function getComponents($loadedOnly=true)
{
if($loadedOnly)
return $this->_components;
else
return array_merge($this->_componentConfig, $this->_components);
}
Возвращает компоненты приложения.
getId() метод
public string getId() | ||
| {возврат} | строка | идентификатор модуля. |
public function getId()
{
return $this->_id;
}
Возвращает идентификатор модуля.
getModule() метод
public CModule getModule(string $id) | ||
| $id | строка | идентификатор модуля приложения (регистрозависимый) |
| {возврат} | CModule | экземпляр модуля, null, если модуль отключён или не существует. |
public function getModule($id)
{
if(isset($this->_modules[$id]) || array_key_exists($id,$this->_modules))
return $this->_modules[$id];
elseif(isset($this->_moduleConfig[$id]))
{
$config=$this->_moduleConfig[$id];
if(!isset($config['enabled']) || $config['enabled'])
{
Yii::trace("Loading \"$id\" module",'system.base.CModule');
$class=$config['class'];
unset($config['class'], $config['enabled']);
if($this===Yii::app())
$module=Yii::createComponent($class,$id,null,$config);
else
$module=Yii::createComponent($class,$this->getId().'/'.$id,$this,$config);
return $this->_modules[$id]=$module;
}
}
}
Возвращает указанный модуль приложения. Модуль должен быть объявлен в modules. Новый экземпляр будет создан при первом вызове этого метода с данным идентификатором.
getModulePath() метод
public string getModulePath() | ||
| {возврат} | строка | каталог, содержащий модули приложения. По умолчанию — подкаталог «modules» каталога basePath. |
public function getModulePath()
{
if($this->_modulePath!==null)
return $this->_modulePath;
else
return $this->_modulePath=$this->getBasePath().DIRECTORY_SEPARATOR.'modules';
}
Возвращает каталог, содержащий модули приложения.
getModules() метод
public array getModules() | ||
| {return} | array | настройка текущих установленных модулей (ID модуля => настройка) |
public function getModules()
{
return $this->_moduleConfig;
}
Возвращает настройки текущих установленных модулей.
getParams() метод
public CAttributeCollection getParams() | ||
| {return} | CAttributeCollection | список параметров, определённых пользователем |
public function getParams()
{
if($this->_params!==null)
return $this->_params;
else
{
$this->_params=new CAttributeCollection;
$this->_params->caseSensitive=true;
return $this->_params;
}
}
Возвращает параметры, определённые пользователем.
getParentModule() метод
public CModule getParentModule() | ||
| {return} | CModule | родительский модуль. Null, если у данного модуля нет родителя. |
public function getParentModule()
{
return $this->_parentModule;
}
Возвращает родительский модуль.
hasComponent() метод
public boolean hasComponent(string $id) | ||
| $id | string | ID компонента приложения |
| {return} | boolean | существует ли компонент приложения с указанным именем (включая загруженные и отключённые). |
public function hasComponent($id)
{
return isset($this->_components[$id]) || isset($this->_componentConfig[$id]);
}
Проверяет наличие компонента с указанным именем.
hasModule() метод (доступен начиная с v1.1.2)
public boolean hasModule(string $id) | ||
| $id | string | ID модуля |
| {return} | boolean | установлен ли указанный модуль. |
public function hasModule($id)
{
return isset($this->_moduleConfig[$id]) || isset($this->_modules[$id]);
}
Возвращает значение, указывающее, установлен ли указанный модуль.
init() метод
protected void init() |
Инициализирует модуль. Этот метод вызывается в конце конструктора модуля. Обратите внимание, что в этот момент модуль был настроен, к нему были присоединены поведения, и компоненты приложения были зарегистрированы.
См. также
preinit() метод
protected void preinit() |
Предварительная инициализация модуля. Этот метод вызывается в начале конструктора модуля. Вы можете переопределить этот метод, чтобы выполнить некоторые индивидуальные работы предварительной инициализации. Обратите внимание, что в этот момент модуль ещё не настроен.
См. также
preloadComponents() метод
protected void preloadComponents() |
protected function preloadComponents()
{
foreach($this->preload as $id)
$this->getComponent($id);
}
Загружает статические компоненты приложения.
setAliases() метод
public void setAliases(array $mappings) | ||
| $mappings | array | список псевдонимов для определения. Ключи массива — корневые псевдонимы, значения — пути или псевдонимы, соответствующие корневым псевдонимам. Например, array( 'models'=>'application.models', // an existing alias 'extensions'=>'application.extensions', // an existing alias 'backend'=>dirname(__FILE__).'/../backend', // a directory ) |
public function setAliases($mappings)
{
foreach($mappings as $name=>$alias)
{
if(($path=Yii::getPathOfAlias($alias))!==false)
Yii::setPathOfAlias($name,$path);
else
Yii::setPathOfAlias($name,$alias);
}
}
Определяет корневые псевдонимы.
setBasePath() метод
public void setBasePath(string $path) | ||
| $path | string | корневой каталог модуля. |
public function setBasePath($path)
{
if(($this->_basePath=realpath($path))===false || !is_dir($this->_basePath))
throw new CException(Yii::t('yii','Base path "{path}" is not a valid directory.',
array('{path}'=>$path)));
}
Устанавливает корневой каталог модуля. Этот метод можно вызывать только в начале конструктора.
setComponent() метод
public void setComponent(string $id, array|IApplicationComponent $component, boolean $merge=true) | ||
| $id | string | ID компонента |
| $component | array|IApplicationComponent | компонент приложения (массив конфигурации или экземпляр). Если этот параметр null, компонент будет загружен из модуля. |
| $merge | boolean | сливать новую конфигурацию компонента с существующей. По умолчанию true, означающее, что существующая конфигурация компонента с тем же ID будет слита с новой конфигурацией. Если false, существующая конфигурация будет полностью заменена. Этот параметр доступен начиная с 1.1.13. |
public function setComponent($id,$component,$merge=true)
{
if($component===null)
{
unset($this->_components[$id]);
return;
}
elseif($component instanceof IApplicationComponent)
{
$this->_components[$id]=$component;
if(!$component->getIsInitialized())
$component->init();
return;
}
elseif(isset($this->_components[$id]))
{
if(isset($component['class']) && get_class($this->_components[$id])!==$component['class'])
{
unset($this->_components[$id]);
$this->_componentConfig[$id]=$component; //we should ignore merge here
return;
}
foreach($component as $key=>$value)
{
if($key!=='class')
$this->_components[$id]->$key=$value;
}
}
elseif(isset($this->_componentConfig[$id]['class'],$component['class'])
&& $this->_componentConfig[$id]['class']!==$component['class'])
{
$this->_componentConfig[$id]=$component; //we should ignore merge here
return;
}
if(isset($this->_componentConfig[$id]) && $merge)
$this->_componentConfig[$id]=CMap::mergeArray($this->_componentConfig[$id],$component);
else
$this->_componentConfig[$id]=$component;
}
Добавляет компонент в управление модулем. Компонент будет инициализирован вызовом его метода init(), если это ещё не сделано.
setComponents() метод
public void setComponents(array $components, boolean $merge=true) | ||
| $components | array | компоненты приложения (id=>конфигурация или экземпляры компонента) |
| $merge | boolean | сливать новую конфигурацию компонента с существующей. По умолчанию true, означающее, что существующая конфигурация компонента с тем же ID будет слита с новой конфигурацией. Если false, существующая конфигурация будет полностью заменена. |
public function setComponents($components,$merge=true)
{
foreach($components as $id=>$component)
$this->setComponent($id,$component,$merge);
}
Устанавливает компоненты приложения.
При использовании конфигурации для определения компонента, она должна содержать начальные значения свойств компонента (парные имя-значение). Кроме того, компонент может быть включен (по умолчанию) или отключен, указав значение 'enabled' в конфигурации.
Если конфигурация указана с ID, совпадающим с существующим компонентом или конфигурацией, существующий будет заменён без ошибок.
Вот конфигурация для двух компонентов:
array(
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'sqlite:path/to/file.db',
),
'cache'=>array(
'class'=>'CDbCache',
'connectionID'=>'db',
'enabled'=>!YII_DEBUG, // enable caching in non-debug mode
),
)
setId() метод
public void setId(string $id) | ||
| $id | string | ID модуля |
public function setId($id)
{
$this->_id=$id;
}
Устанавливает ID модуля.
setImport() метод
public void setImport(array $aliases) | ||
| $aliases | array | список импортируемых псевдонимов |
public function setImport($aliases)
{
foreach($aliases as $alias)
Yii::import($alias);
}
Устанавливает псевдонимы, используемые в модуле.
setModulePath() метод
public void setModulePath(string $value) | ||
| $value | string | директория, содержащая модули приложения. |
public function setModulePath($value)
{
if(($this->_modulePath=realpath($value))===false || !is_dir($this->_modulePath))
throw new CException(Yii::t('yii','The module path "{path}" is not a valid directory.',
array('{path}'=>$value)));
}
Устанавливает директорию, содержащую модули приложения.
setModules() метод
public void setModules(array $modules, boolean $merge=true) | ||
| $modules | array | конфигурации модулей. |
| $merge | boolean | следует ли объединить новую конфигурацию модулей со старой. По умолчанию true, означая, что ранее зарегистрированная конфигурация модуля с тем же идентификатором будет объединена с новой. Если установлено в false, существующая конфигурация будет полностью заменена. Этот параметр доступен начиная с версии 1.1.16. |
public function setModules($modules,$merge=true)
{
foreach($modules as $id=>$module)
{
if(is_int($id))
{
$id=$module;
$module=array();
}
if(isset($this->_moduleConfig[$id]) && $merge)
$this->_moduleConfig[$id]=CMap::mergeArray($this->_moduleConfig[$id],$module);
else
{
if(!isset($module['class']))
{
if (Yii::getPathOfAlias($id)===false)
Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id);
$module['class']=$id.'.'.ucfirst($id).'Module';
}
$this->_moduleConfig[$id]=$module;
}
}
}
Конфигурирует подмодули этого модуля.
Вызовите этот метод, чтобы объявить подмодули и настроить их начальными значениями свойств. Параметром должен быть массив конфигураций модулей. Каждый элемент массива представляет отдельный модуль, который может быть либо строкой, представляющей идентификатор модуля, либо парой "идентификатор-конфигурация", представляющей модуль с указанным идентификатором и начальными значениями свойств.
Например, следующий массив объявляет два модуля:
array(
'admin', // a single module ID
'payment'=>array( // ID-configuration pair
'server'=>'paymentserver.com',
),
)
По умолчанию класс модуля определяется с помощью выражения
ucfirst($moduleID).'Module'. А файл класса расположен в modules/$moduleID. Вы можете переопределить это значение по умолчанию, явно указав опцию 'class' в конфигурации. Вы также можете включить или отключить модуль, указав опцию 'enabled' в конфигурации.
setParams() метод
public void setParams(array $value) | ||
| $value | array | пользовательские параметры. Должны быть в виде пар "имя-значение". |
public function setParams($value)
{
$params=$this->getParams();
foreach($value as $k=>$v)
$params->add($k,$v);
}
Устанавливает пользовательские параметры.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CModule