Мне нужно программно изменить поведение формы на основе некоторых параметров. Скажем, например, я показываю форму с информацией о пользователе.Zend Framework 2: передача переменных ("options") для формирования с использованием formelementmanager
Мне нужно показать флажок «отправить почту», если и только если пользователь еще не получил почту активации. Ранее, с ZF1, я использовал, чтобы сделать что-то вроде
$form = new MyForm(array("displaySendMail" => true))
, который, в свою очередь, был принят в качестве опции, и которые allow'd сделать
class MyForm extends Zend_Form {
protected $displaySendMail;
[...]
public function setDisplaySendMail($displaySendMail)
{
$this->displaySendMail = $displaySendMail;
}
public function init() {
[....]
if($this->displaySendMail)
{
$displaySendMail new Zend_Form_Element_Checkbox("sendmail");
$displaySendMail
->setRequired(true)
->setLabel("Send Activation Mail");
}
}
Как это может быть достигнуто с помощью Zend Рамки 2? Все, что я нашел, это управление зависимостями (классами) и ничего об этом сценарии, кроме этого вопроса SO: ZF2 How to pass a variable to a form , который в конце концов возвращается к передаче зависимости. Может быть, последний комментарий Jean Paul Rumeau может дать решение, но я не смог заставить его работать. Thx A.
@AlexP, спасибо за вашу поддержку. Я уже использую FormElementManager, поэтому он должен быть простым. Если я правильно понял, я должен просто получить эту опцию в моем конструкторе SomeForm, не так ли?
[in Module.php]
'Application\SomeForm' => function($sm)
{
$form = new SomeForm();
$form->setServiceManager($sm);
return $form;
},
в SomeForm.php
class SomeForm extends Form implements ServiceManagerAwareInterface
{
protected $sm;
public function __construct($name, $options) {
[here i have options?]
parent::__construct($name, $options);
}
}
I судимое это, но не работал, я дам ему вторую попытку и дважды проверить все.
Спасибо вам большое! –
$ this-> options останется неизменным ('foo' => 'bar'), если я сделаю второй вызов следующим образом: $ form2 = $ formElementManager-> get ('SomeForm', array ('foo' => 'bar2 «)); – vlr
@vlr Служба по умолчанию будет «совместно»; что после создания он продолжает возвращать * тот же самый экземпляр для каждого вызова в '$ formElementManager-> get()'. Вы можете отключить это [, пометив службу как не общий] (http://framework.zend.com/manual/current/en/modules/zend.service-manager.quick-start.html#sample-configuration) - Предоставление вам нового экземпляра службы (каждый раз с использованием нового экземпляра фабрики 'SomeFormFactory'). – AlexP