Я большую часть дня пытаюсь найти ответ, но я, наконец, признал поражение.Инициализация формы zend с переменной длиной данных
Я работаю над формой в Zend Framework, которая должна обрабатывать переменные длины данных. У меня есть форма с некоторыми общими полями, которые задают некоторые общие параметры (название элемента, язык и т. Д.), Которые достаточно легки для решения, но у меня также есть подформация, называемая параметрами, которая содержит переменное число ключей/значений lairs, которые позволяют добавлять в данные общие параметры. Ниже приведена демонстрационная форма:
<form>
<input type="text" name="item_name" />
<input type="text" name="item_lang" />
<!-- etc -->
<input type="text" name="parameters[1][key]" />
<input type="text" name="parameters[1][value]" />
<input type="text" name="parameters[2][key]" />
<input type="text" name="parameters[2][value]" />
<input type="text" name="parameters[3][key]" />
<input type="text" name="parameters[3][value]" />
<input type="text" name="parameters[4][key]" />
<input type="text" name="parameters[4][value]" />
<!-- and so on -->
</form>
Примечание: приведенное выше является массовым упрощением фактической формы. Он также создается вручную вместо создания zend_form.
Количество параметров может отличаться и может обрабатываться на стороне клиента с помощью javascript, но я действительно пытаюсь инициализировать форму при заполнении ее из ранее существовавших данных для обновления.
Возможно, у меня есть 2 параметра для каждого элемента, у меня может быть 20, у меня может быть совсем нет. Поэтому мне нужна форма для ввода 2 или 20 или без параметров в зависимости от исходного состояния данных. К сожалению, данные недоступны в init(), потому что они не находятся в форме, пока вы не вызовете setDefaults() на нем.
Это означает, что я не могу сделать foreach() в исходном состоянии формы для создания соответствующего количества полей ввода для уже существующих данных.
Уверен, что я должен упустить что-то очевидное, но документация Zend довольно ужасна, и я не могу найти примеров этого варианта использования. Конечно, не может быть так необычно, что он не поддерживается в zend_form. Как мне создать форму в состоянии, которое позволяет изменять начальное состояние формы?
ETA: метод Init() на моей форме выглядит следующим образом (упрощенный, чтобы соответствовать примеру):
public function init()
{
parent::init();
$this -> addElement ('text', 'item_name');
$this -> addElement ('text', 'item_lang');
$this -> addSubForm (new Zend_Form_SubForm(), 'parameters');
foreach ($phantom_data as $key => $val)
{
$params = new Zend_Form_SubForm();
$params -> addElement ('text', 'key');
$params -> addElement ('text', 'value');
$this -> parameters -> addSubForm ($params, $key);
}
}
Это ужасно но это выглядит так, как будто это единственное жизнеспособное решение. Я не могу поверить, что форма zend была настолько некомпетентно написана, что не могла принять во внимание такой случай пользователя. Я делал подобное много раз раньше в POPHP, не перепрыгивая через эти виды обручей. – GordonM