Zend Form: как передать параметры в конструктор? - PullRequest
7 голосов
/ 17 июня 2010

Я пытаюсь проверить свою форму. Он будет создавать другие объекты, поэтому мне нужен способ их издеваться. Я пытался передать их в конструктор ...

class Form_Event extends Zend_Form
{
    public function __construct($options = null, $regionMapper = null)
    {
        $this->_regionMapper = $regionMapper;
        parent::__construct($options);
    }

... но я получаю исключение:

Zend_Form_Exception: Only form elements and groups may be overloaded; variable of type "Mock_Model_RegionMapper_b19e528a" provided

Что я делаю не так?

Ответы [ 2 ]

12 голосов
/ 17 июня 2010

Беглый взгляд на исходный код , равный Zend_Form, показывает, что исключение выдается в методе __set().Метод запущен, потому что вы назначаете $_regionMapper на лету, когда он не существует.

Объявите его в классе, и он должен работать нормально, например

class Form_Event extends Zend_Form
{
    protected $_regionMapper;

    public function __construct($options = null, $regionMapper = null)
    {
        $this->_regionMapper = $regionMapper;
        parent::__construct($options);
    }

глава о Магические методы в руководстве по PHP .

1 голос
/ 20 марта 2015

Zend_Form конструктор ищет определенный шаблон в именах методов в вашей форме.Шаблон setMethodName.конструктор вызывает метод MethodName и передает ему параметр.

Таким образом, вы получите это в своем классе:

class My_Form extends Zend_Form
{

    protected $_myParameters;

    public function setParams($myParameters)
    {
        $this->_myParameters = $myParameters;
    }

И вы передадите параметры в форму с помощью:

$form = new My_Form( array('params' => $myParameters) );

Таким образом, вместо params вы можете использовать любые другие имена (конечно, если они не существуют в Zend_Form).

...