2011-05-23 62 views
0

我希望zend形式覆蓋setValue函數,以便可以操作賦予該函數的值。我怎樣才能實現這個?以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); 
    } 
} 

在此先感謝..

+0

你嘗試過什麼已經經過然後將此你的元素呢? – martynthewolf 2011-05-23 10:26:33

回答

1

可以擴展Zend_Form的到自己的類,如:

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

然後使用這個類直接代替Zend_Form

+0

我試過了,但函數沒有被覆蓋。 – user765817 2011-05-24 04:46:56

+0

爲了利用你的'setValue()'函數,你需要使用:'$ form = new My_Form'而不是'$ form = new Zend_Form' – 2011-05-24 07:32:47

1

考慮使用Zend filter inter反而面對。例如

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));