2011-12-01 82 views
1
class Application_Form_ImageUpload extends Zend_Form 
{ 
    protected $user_id; 

    function __construct($id){ 
      $this->user_id = $id; 
    } 
    public function init() 
    { 
     $user_path = '/var/www/upload/' . $this->user_id; 
    ... 
     $submit = new Zend_Form_Element_Submit('submit'); 
     $submit->setLabel('Upload'); 

     $this->addElement($element, 'image'); 
     $this->addElement($submit, 'submit'); 
    } 



} 

呼喚:爲什麼這個構造函數會導致空白輸出?

 $email = Zend_Auth::getInstance()->getIdentity(); 
    $user_id = $mapper->getUserId($email); 
    $uploadForm = new Application_Form_UserImageUpload($user_id); 

添加構造之後,輸出的形式變爲空白。這是爲什麼?

回答

2

因爲你已經覆蓋默認ZF構造函數調用init

/** 
* Constructor 
* 
* Registers form view helper as decorator 
* 
* @param mixed $options 
* @return void 
*/ 
public function __construct($options = null) 
{ 
    if (is_array($options)) { 
     $this->setOptions($options); 
    } elseif ($options instanceof Zend_Config) { 
     $this->setConfig($options); 
    } 

    // Extensions... 
    $this->init(); 

    $this->loadDefaultDecorators(); 
} 

你可以通過調用它在你解決這個問題:

function __construct($id){ 
    $this->user_id = $id; 
    parent::__construct(); 
} 

或者,如果你想要一個更通用的解決方案,Zend_Form默認的構造函數調用它的setOptions方法,該方法使用魔術方法來設置屬性,所以如果你在表單類中編寫一個setter,它將被調用options值。例如:

// in your class 
class My_Form extends Zend_Form { 
    protected $_uid; 

    public function setUid($uid) { 
    $this->_uid = $uid; 
    } 

    public function getUid() { 
    return $this->_uid; 
    } 
} 
// build the form 
$form = new My_Form(array('uid' => 123)); // this calls setUid automagically 
echo $form->getUid(); // outputs 123 
+0

哦,我明白了!父母的構造函數!我應該知道這個!我下次會更好,謝謝! – Strawberry

相關問題