Форма Zend, использующая одно и то же имя для двух полей с использованием нотации массива

Использование Zend Framework 1.9. У меня есть форма:

...
$this->addElement('text', 'field', [
'label' => 'Name (*)',
'belongsTo' => 'a'
]);
$this->addElement('text', 'field', [
'label' => 'Name (*)',
'belongsTo' => 'b'
]);

...

Я использую обозначение массива, которые создают вложенный массив, как это:

array (size=10)
'a' =>
array
'field' => string '' (length=0)
'b' =>
array
'field' => string '' (length=0)

Это примечание полезно для меня, но когда я заполняю форму структурой массива, подобной этой:

$data=[
"a"=>
[
"field"=>"MY CUSTOM TEXT"],
"b"=>
[
"field"=>"MY SECOND CUSTOM TEXT"]
]
$form->populate($data)

форма не заполнена.

Я прочитал, что Zend_form не работает с полями с одинаковыми именами, но в моем случае я использую нотацию массива. Мне нужно использовать одно и то же имя, потому что я использую имя столбца в базе данных, поэтому в моей базе данных есть две таблицы «a», «b» с одинаковым столбцом с именем «field».

Есть решение?

0

Решение

Вы пытались использовать подчиненные формы? У меня есть 1.11, поэтому я не знаю, но я успешно добился того, что вы хотите с этим кодом

/**
* Form class that should be in application/forms/Foo.php
*/
class Application_Form_Foo extends Zend_Form
{
public function init()
{
$subFormA = new Zend_Form_SubForm();
$subFormA->addElement($subFormA->createElement('text', 'field', array
(
'label' => 'Name (*)',
'belongsTo' => 'a',
)));

$subFormB = new Zend_Form_SubForm();
$subFormB->addElement($subFormB->createElement('text', 'field', array
(
'label' => 'Name (*)',
'belongsTo' => 'b',
)));

$this->addSubForm($subFormA, 'a');
$this->addSubForm($subFormB, 'b');$this->addElement($this->createElement('submit', 'send'));
}
}

И контроллер

/**
* The controller that both process the request and display the form.
*/
class FooController extends Zend_Controller_Action
{
public function indexAction()
{
// Get the form.
$foo = new Application_Form_Foo();

// Poppulate the form from the request.
if ($foo->isValid($this->getRequest()->getParams()))
{
$foo->populate($foo->getValues());
}

// Set the form to the view.
$this->view->form = $foo;
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]