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);
添加构造函数后,表单的输出变为空白。那是为什么?
答案 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