123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- /**
- * CFormElement class file.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.yiiframework.com/
- * @copyright 2008-2013 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
- /**
- * CFormElement is the base class for presenting all kinds of form element.
- *
- * CFormElement implements the way to get and set arbitrary attributes.
- *
- * @property boolean $visible Whether this element is visible and should be rendered.
- * @property mixed $parent The direct parent of this element. This could be either a {@link CForm} object or a {@link CBaseController} object
- * (a controller or a widget).
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @package system.web.form
- * @since 1.1
- */
- abstract class CFormElement extends CComponent
- {
- /**
- * @var array list of attributes (name=>value) for the HTML element represented by this object.
- */
- public $attributes=array();
- private $_parent;
- private $_visible;
- /**
- * Renders this element.
- * @return string the rendering result
- */
- abstract function render();
- /**
- * Constructor.
- * @param mixed $config the configuration for this element.
- * @param mixed $parent the direct parent of this element.
- * @see configure
- */
- public function __construct($config,$parent)
- {
- $this->configure($config);
- $this->_parent=$parent;
- }
- /**
- * Converts the object to a string.
- * This is a PHP magic method.
- * The default implementation simply calls {@link render} and return
- * the rendering result.
- * @return string the string representation of this object.
- */
- public function __toString()
- {
- return $this->render();
- }
- /**
- * Returns a property value or an attribute value.
- * Do not call this method. This is a PHP magic method that we override
- * to allow using the following syntax to read a property or attribute:
- * <pre>
- * $value=$element->propertyName;
- * $value=$element->attributeName;
- * </pre>
- * @param string $name the property or attribute name
- * @return mixed the property or attribute value
- * @throws CException if the property or attribute is not defined
- * @see __set
- */
- public function __get($name)
- {
- $getter='get'.$name;
- if(method_exists($this,$getter))
- return $this->$getter();
- elseif(isset($this->attributes[$name]))
- return $this->attributes[$name];
- else
- throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.',
- array('{class}'=>get_class($this), '{property}'=>$name)));
- }
- /**
- * Checks a property value or an attribute value on existence or not null
- * Do not call this method. This is a PHP magic method that we override
- * to allow using the following syntax to read a property or attribute:
- * <pre>
- * isset($element->propertyName);
- * </pre>
- * @param string $name the property or attribute name
- * @return boolean
- */
- public function __isset($name)
- {
- $getter='get'.$name;
- if(method_exists($this,$getter))
- return $this->$getter()!==null;
- elseif(isset($this->attributes[$name]))
- return isset($this->attributes[$name]);
- else
- return false;
- }
- /**
- * Sets value of a property or attribute.
- * Do not call this method. This is a PHP magic method that we override
- * to allow using the following syntax to set a property or attribute.
- * <pre>
- * $this->propertyName=$value;
- * $this->attributeName=$value;
- * </pre>
- * @param string $name the property or attribute name
- * @param mixed $value the property or attribute value
- * @see __get
- */
- public function __set($name,$value)
- {
- $setter='set'.$name;
- if(method_exists($this,$setter))
- $this->$setter($value);
- else
- $this->attributes[$name]=$value;
- }
- /**
- * Configures this object with property initial values.
- * @param mixed $config the configuration for this object. This can be an array
- * representing the property names and their initial values.
- * It can also be a string representing the file name of the PHP script
- * that returns a configuration array.
- */
- public function configure($config)
- {
- if(is_string($config))
- $config=require(Yii::getPathOfAlias($config).'.php');
- if(is_array($config))
- {
- foreach($config as $name=>$value)
- $this->$name=$value;
- }
- }
- /**
- * Returns a value indicating whether this element is visible and should be rendered.
- * This method will call {@link evaluateVisible} to determine the visibility of this element.
- * @return boolean whether this element is visible and should be rendered.
- */
- public function getVisible()
- {
- if($this->_visible===null)
- $this->_visible=$this->evaluateVisible();
- return $this->_visible;
- }
- /**
- * @param boolean $value whether this element is visible and should be rendered.
- */
- public function setVisible($value)
- {
- $this->_visible=$value;
- }
- /**
- * @return mixed the direct parent of this element. This could be either a {@link CForm} object or a {@link CBaseController} object
- * (a controller or a widget).
- */
- public function getParent()
- {
- return $this->_parent;
- }
- /**
- * Evaluates the visibility of this element.
- * Child classes should override this method to implement the actual algorithm
- * for determining the visibility.
- * @return boolean whether this element is visible. Defaults to true.
- */
- protected function evaluateVisible()
- {
- return true;
- }
- }
|