为什么这个构造函数导致空白输出?

时间:2011-12-01 23:55:30

标签: php zend-framework

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

添加构造函数后,表单的输出变为空白。那是为什么?

1 个答案:

答案 0 :(得分:2)

因为你已经覆盖了调用init

的默认ZF构造函数
/**
 * 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,它将被调用期权价值。例如:

// 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