diff --git a/framework/base/Module.php b/framework/base/Module.php index 99ac5dc..44de4f0 100644 --- a/framework/base/Module.php +++ b/framework/base/Module.php @@ -21,10 +21,6 @@ namespace yii\base; abstract class Module extends Component { /** - * @var string the ID of this module. This should follow the same rule as naming PHP variables. - */ - public $id; - /** * @var array custom module parameters (name => value). */ public $params = array(); @@ -39,6 +35,7 @@ abstract class Module extends Component */ public $behaviors = array(); + private $_id; private $_parentModule; private $_basePath; private $_modulePath; @@ -89,10 +86,12 @@ abstract class Module extends Component */ public function __get($name) { - if ($this->hasComponent($name)) + if ($this->hasComponent($name)) { return $this->getComponent($name); - else + } + else { return parent::__get($name); + } } /** @@ -104,10 +103,43 @@ abstract class Module extends Component */ public function __isset($name) { - if ($this->hasComponent($name)) + if ($this->hasComponent($name)) { return $this->getComponent($name) !== null; - else + } + else { return parent::__isset($name); + } + } + + /** + * Returns a list of behaviors that this model should behave as. + * The return value of this method should be an array of behavior configurations + * indexed by behavior names. For more details, please refer to [[Model::behaviors]]. + * + * The declared behaviors will be attached to the module when [[init]] is called. + * @return array the behavior configurations. + */ + public function behaviors() + { + return array(); + } + + /** + * Returns the module ID. + * @return string the module ID. + */ + public function getId() + { + return $this->_id; + } + + /** + * Sets the module ID. + * @param string $id the module ID + */ + public function setId($id) + { + $this->_id=$id; } /** @@ -175,27 +207,24 @@ abstract class Module extends Component } /** - * Defines the root aliases. - * @param array $mappings list of aliases to be defined. The array keys are root aliases, - * while the array values are paths or aliases corresponding to the root aliases. + * Defines path aliases. + * This method calls [[\Yii::setPathOfAlias]] to register the path aliases. + * This method is provided so that you can define path aliases by module configuration. + * @param array $aliases list of path aliases to be defined. The array keys are alias names + * (must start with '@') while the array values are the corresponding paths or aliases. * For example, - *
+ * + * ~~~ * array( - * 'models'=>'application.models', // an existing alias - * 'extensions'=>'application.extensions', // an existing alias - * 'backend'=>dirname(__FILE__).'/../backend', // a directory + * '@models' => '@app/models', // an existing alias + * '@backend' => __DIR__ . '/../backend', // a directory * ) - *- * @since 1.0.5 + * ~~~ */ - public function setAliases($mappings) + public function setAliases($aliases) { - foreach ($mappings as $name => $alias) - { - if (($path = Yii::getPathOfAlias($alias)) !== false) - Yii::setPathOfAlias($name, $path); - else - Yii::setPathOfAlias($name, $alias); + foreach ($aliases as $name => $alias) { + \Yii::setAlias($name, $alias); } } @@ -436,7 +465,7 @@ abstract class Module extends Component /** * Loads static application components. */ - protected function preloadComponents() + public function preloadComponents() { foreach ($this->preload as $id) $this->getComponent($id); @@ -449,7 +478,7 @@ abstract class Module extends Component * Note that at this moment, the module is not configured yet. * @see init */ - protected function preinit() + public function preinit() { } @@ -460,7 +489,7 @@ abstract class Module extends Component * have been attached and the application components have been registered. * @see preinit */ - protected function init() + public function init() { } } diff --git a/todo.txt b/todo.txt index f9c5ddc..7cbe208 100644 --- a/todo.txt +++ b/todo.txt @@ -1,3 +1,11 @@ - CompareValidator::clientValidateAttribute(): search for "CHtml::activeId" - FileValidator, UniqueValidator, ExistValidator, DateValidator: TBD -- Can consider merging UniqueValidator and ExistValidator and using a NOT property. \ No newline at end of file +- Can consider merging UniqueValidator and ExistValidator and using a NOT property. +- design of component life cycles: init() and afterConstruct() + * construct object + * preinit + * attachBehaviors + * initialize properties + * init + * ... + * destruct \ No newline at end of file