Browse Source

w

tags/2.0.0-beta
Qiang Xue 13 years ago
parent
commit
567f81ce67
  1. 20
      framework/YiiBase.php
  2. 2
      framework/base/Dictionary.php
  3. 88
      framework/base/Model.php
  4. 14
      framework/base/ModelEvent.php

20
framework/YiiBase.php

@ -167,7 +167,7 @@ class YiiBase
return self::$_imported[$alias] = $className;
}
if (($path = self::getPathOfAlias(dirname($alias))) === false) {
if (($path = self::getAlias(dirname($alias))) === false) {
throw new \yii\base\Exception('Invalid path alias: ' . $alias);
}
@ -189,16 +189,16 @@ class YiiBase
/**
* Translates a path alias into an actual path.
* The path alias can be either a root alias registered via [[setPathOfAlias]] or an
* The path alias can be either a root alias registered via [[setAlias]] or an
* alias starting with a root alias (e.g. `@yii/base/Component.php`).
* In the latter case, the root alias will be replaced by the corresponding registered path
* and the remaining part will be appended to it.
* Note, this method does not ensure the existence of the resulting path.
* @param string $alias alias
* @return mixed path corresponding to the alias, false if the root alias is not previously registered.
* @see setPathOfAlias
* @see setAlias
*/
public static function getPathOfAlias($alias)
public static function getAlias($alias)
{
if (isset(self::$aliases[$alias])) {
return self::$aliases[$alias];
@ -220,9 +220,9 @@ class YiiBase
* @param string $alias alias to the path. The alias must start with '@'.
* @param string $path the path corresponding to the alias. If this is null, the corresponding
* path alias will be removed. The path can be a file path (e.g. `/tmp`) or a URL (e.g. `http://www.yiiframework.com`).
* @see getPathOfAlias
* @see getAlias
*/
public static function setPathOfAlias($alias, $path)
public static function setAlias($alias, $path)
{
if ($path === null) {
unset(self::$aliases[$alias]);
@ -261,7 +261,7 @@ class YiiBase
if (strpos($className, '\\') !== false) {
// convert namespace to path alias, e.g. yii\base\Component to @yii/base/Component
$alias = '@' . str_replace('\\', '/', ltrim($className, '\\'));
if (($path = self::getPathOfAlias($alias)) !== false) {
if (($path = self::getAlias($alias)) !== false) {
include($path . '.php');
return true;
}
@ -272,7 +272,7 @@ class YiiBase
if (($pos = strpos($className, '_')) !== false) {
// convert class name to path alias, e.g. PHPUnit_Framework_TestCase to @PHPUnit/Framework/TestCase
$alias = '@' . str_replace('_', '/', $className);
if (($path = self::getPathOfAlias($alias)) !== false) {
if (($path = self::getAlias($alias)) !== false) {
include($path . '.php');
return true;
}
@ -295,9 +295,9 @@ class YiiBase
*
* The specified configuration can be either a string or an array.
* If the former, the string is treated as the object type which can
* be either a class name or [[getPathOfAlias|path alias]].
* be either a class name or [[getAlias|path alias]].
* If the latter, the array must contain a `class` element which refers
* to a class name or [[getPathOfAlias|path alias]]. The rest of the name-value
* to a class name or [[getAlias|path alias]]. The rest of the name-value
* pairs in the array will be used to initialize the corresponding object properties.
* For example,
*

2
framework/base/Dictionary.php

@ -274,7 +274,7 @@ class Dictionary extends Component implements \IteratorAggregate, \ArrayAccess,
* This method is required by the SPL interface `ArrayAccess`.
* It is implicitly called when you use something like `$value = $dictionary[$offset];`.
* This is equivalent to [[itemAt]].
* @param integer $offset the offset to retrieve element.
* @param mixed $offset the offset to retrieve element.
* @return mixed the element at the offset, null if no element is found at the offset
*/
public function offsetGet($offset)

88
framework/base/Model.php

@ -222,8 +222,9 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function afterConstruct()
{
if ($this->hasEventHandler('onAfterConstruct'))
$this->onAfterConstruct(new CEvent($this));
if ($this->hasEventHandler('onAfterConstruct')) {
$this->onAfterConstruct(new Event($this));
}
}
/**
@ -236,10 +237,13 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function beforeValidate()
{
if ($this->hasEventHandler('onBeforeValidate')) {
$event = new ModelEvent($this);
$this->onBeforeValidate($event);
return $event->isValid;
}
return true;
}
/**
* This method is invoked after validation ends.
@ -249,8 +253,10 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function afterValidate()
{
if ($this->hasEventHandler('onAfterValidate')) {
$this->onAfterValidate(new CEvent($this));
}
}
/**
* This event is raised after the model instance is created by new operator.
@ -258,7 +264,7 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function onAfterConstruct($event)
{
$this->raiseEvent('onAfterConstruct', $event);
$this->raiseEvent(__METHOD__, $event);
}
/**
@ -267,7 +273,7 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function onBeforeValidate($event)
{
$this->raiseEvent('onBeforeValidate', $event);
$this->raiseEvent(__METHOD__, $event);
}
/**
@ -276,7 +282,7 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function onAfterValidate($event)
{
$this->raiseEvent('onAfterValidate', $event);
$this->raiseEvent(__METHOD__, $event);
}
/**
@ -391,11 +397,13 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function hasErrors($attribute = null)
{
if ($attribute === null)
if ($attribute === null) {
return $this->_errors !== array();
else
}
else {
return isset($this->_errors[$attribute]);
}
}
/**
* Returns the errors for all attribute or a single attribute.
@ -404,11 +412,13 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function getErrors($attribute = null)
{
if ($attribute === null)
if ($attribute === null) {
return $this->_errors;
else
}
else {
return isset($this->_errors[$attribute]) ? $this->_errors[$attribute] : array();
}
}
/**
* Returns the first error of the specified attribute.
@ -457,11 +467,13 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function clearErrors($attribute = null)
{
if ($attribute === null)
if ($attribute === null) {
$this->_errors = array();
else
}
else {
unset($this->_errors[$attribute]);
}
}
/**
* Generates a user friendly attribute label.
@ -486,17 +498,20 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
public function getAttributes($names = null)
{
$values = array();
foreach ($this->attributeNames() as $name)
$values[$name] = $this->$name;
if (is_array($names))
{
$values2 = array();
foreach ($names as $name)
$values2[$name] = isset($values[$name]) ? $values[$name] : null;
return $values2;
if (is_array($names)) {
foreach ($this->attributeNames() as $name) {
if (in_array($name, $names, true)) {
$values[$name] = $this->$name;
}
else
}
}
else {
foreach ($this->attributeNames() as $name) {
$values[$name] = $this->$name;
}
}
return $values;
}
@ -510,17 +525,18 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
*/
public function setAttributes($values, $safeOnly = true)
{
if (!is_array($values))
return;
if (is_array($values)) {
$attributes = array_flip($safeOnly ? $this->getSafeAttributeNames() : $this->attributeNames());
foreach ($values as $name => $value)
{
if (isset($attributes[$name]))
foreach ($values as $name => $value) {
if (isset($attributes[$name])) {
$this->$name = $value;
elseif ($safeOnly)
}
elseif ($safeOnly) {
$this->onUnsafeAttribute($name, $value);
}
}
}
}
/**
* Sets the attributes to be null.
@ -590,22 +606,22 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
{
$attributes = array();
$unsafe = array();
foreach ($this->getValidators() as $validator)
{
if (!$validator->safe)
{
foreach ($validator->attributes as $name)
foreach ($this->getValidators() as $validator) {
if (!$validator->safe) {
foreach ($validator->attributes as $name) {
$unsafe[] = $name;
}
else
{
foreach ($validator->attributes as $name)
}
else {
foreach ($validator->attributes as $name) {
$attributes[$name] = true;
}
}
}
foreach ($unsafe as $name)
foreach ($unsafe as $name) {
unset($attributes[$name]);
}
return array_keys($attributes);
}
@ -636,7 +652,7 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
* Returns the element at the specified offset.
* This method is required by the SPL interface `ArrayAccess`.
* It is implicitly called when you use something like `$value = $model[$offset];`.
* @param integer $offset the offset to retrieve element.
* @param mixed $offset the offset to retrieve element.
* @return mixed the element at the offset, null if no element is found at the offset
*/
public function offsetGet($offset)

14
framework/base/ModelEvent.php

@ -2,24 +2,22 @@
/**
* CModelEvent class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright &copy; 2008-2011 Yii Software LLC
* @copyright Copyright &copy; 2008-2012 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\base;
/**
* CModelEvent class.
* ModelEvent class.
*
* CModelEvent represents the event parameters needed by events raised by a model.
* ModelEvent represents the event parameters needed by events raised by a model.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Id: CModelEvent.php 2799 2011-01-01 19:31:13Z qiang.xue $
* @package system.base
* @since 1.0
* @since 2.0
*/
class CModelEvent extends CEvent
class ModelEvent extends Event
{
/**
* @var boolean whether the model is in valid status and should continue its normal method execution cycles. Defaults to true.

Loading…
Cancel
Save