以zend形式覆盖setValue

时间:2011-05-23 10:24:11

标签: php oop zend-form

我希望zend表单覆盖setValue函数,以便可以操作赋予函数的值。我该如何实现呢?

我目前的表单结构如下:

class  My_Form_Login   
{   
 public $Form;  
 public $Username;      
 public function  __construct()  
    {  
        $this->Form = new Form_Abstract();  
        $this->init();  
    }  
 public function init()  
    {  
     $this->Username ->setValue('100');  
    }  
}    

class Form_Abstract extends Zend_Form  
{  
    public function __construct($options = null)  
    {  
        parent::__construct($options);  
        $this->setDecorators(array(  'FormElements','FormErrors','Form' ));  
    }  

    public function setValue($value)
    {     
        $strippedValue = stripslashes($value);  
        return parent::setValue($strippedValue);  
    }
}

提前致谢..

2 个答案:

答案 0 :(得分:1)

您可以将Zend_Form扩展到您自己的类中,如:

My_Form extends Zend_Form
{
  public function setValue($arg)
  {
    // My override code here
  }
}

然后直接使用此类而不是Zend_Form

答案 1 :(得分:1)

请考虑使用Zend过滤器界面。例如

class My_Filter_Stripslashes implements Zend_Filter_Interface
{
    public function filter($value)
    {
        return get_magic_quotes_gpc() ? $this->_clean($value) : $value;
    }

    protected function _clean($value)
    {
        return is_array($value) ? array_map(array($this, '_clean'), $value) : stripslashes($value);
    }
}

然后在添加元素后将其应用于元素

$form->setElementFilters(array(new My_Filter_Stripslashes));