* @link http://www.yiiframework.com/ * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** * CFormModel represents a data model that collects HTML form inputs. * * Unlike {@link CActiveRecord}, the data collected by CFormModel are stored * in memory only, instead of database. * * To collect user inputs, you may extend CFormModel and define the attributes * whose values are to be collected from user inputs. You may override * {@link rules()} to declare validation rules that should be applied to * the attributes. * * @author Qiang Xue * @package system.web * @since 1.0 */ class CFormModel extends CModel { private static $_names=array(); /** * Constructor. * @param string $scenario name of the scenario that this model is used in. * See {@link CModel::scenario} on how scenario is used by models. * @see getScenario */ public function __construct($scenario='') { $this->setScenario($scenario); $this->init(); $this->attachBehaviors($this->behaviors()); $this->afterConstruct(); } /** * Initializes this model. * This method is invoked in the constructor right after {@link scenario} is set. * You may override this method to provide code that is needed to initialize the model (e.g. setting * initial property values.) */ public function init() { } /** * Returns the list of attribute names. * By default, this method returns all public properties of the class. * You may override this method to change the default. * @return array list of attribute names. Defaults to all public properties of the class. */ public function attributeNames() { $className=get_class($this); if(!isset(self::$_names[$className])) { $class=new ReflectionClass(get_class($this)); $names=array(); foreach($class->getProperties() as $property) { $name=$property->getName(); if($property->isPublic() && !$property->isStatic()) $names[]=$name; } return self::$_names[$className]=$names; } else return self::$_names[$className]; } }