2012-05-16 3 views
0

Я начал создавать форму Zend:присоединение объекта к форме Zend

$form = new Form_ChangePersonalDetails(
        array('person'=>$person, 
          'emailvalidator'=>$validator, 
          )); 

, где человек является объектом. Он работает, хотя он показывает предупреждение:

Warning: htmlspecialchars() expects parameter 1 to be string, object given 

Можно ли как можно скорее удалить это предупреждение?

ответ

0

Вам необходимо реализовать свой собственный конструктор! :) Скажите

public function __construct($person, $emailValidator, $options) { 
    parent::__construct($options); 
    $this->_person = $person; 
    //or if you want to fill the form with the object's data 
    $this->populate($person->toArray()); 
    $this->emailField->addValidator($emailValidator); 
} 
+0

Да, вы правы, моя версия не работает, из-за использования массива для элементов формы. С вашей версией он отлично работает. – tildy

1

По умолчанию любые нераспознанные параметры, переданные конструктору Zend_Form, будут рассматриваться как дополнительные атрибуты формы, которые добавляются в тег <form>.

Если возможно, добавьте метод __toString() к Person класса, поэтому он может быть приведен к строке, или в зависимости от того, что вы пытаетесь сделать с этим объектом, возможно, потребуется переопределить Zend_Form::__construct() поэтому он признает, что вы прошли специальный объект, и он может справиться с ним перед вызовом Zend_Form::__construct() для обработки любых других параметров, переданных конструктору формы.

Что конкретно вы пытаетесь сделать, передав этот объект вашему конструктору формы?

+0

Если я удалю массив и использую эти элементы один за другим, также измените родительский :: __ construct ($ options) на parent :: __ construct Так что да, вы были правы, это связано с конструкцией. – tildy

Смежные вопросы