Проблема: несколько полей в форме не заполняются/не гидратируются при использовании $ form-> bind ($ object). Как вы заполняете 2 разных поля в форме vai 2 разных объекта сущности? У меня 2 fieldsets: FieldsetA, FieldsetBzf2/zf3 Гидрат Несколько полей с объектами
форма RegisterFrom называет их в своей инициализации() метод
class RegisterForm extends Form
{
public function init(){
$this->add(array(
'name' => 'service_provider_fieldset',
'type' => ServiceProviderFieldset::class, // this is one model/entity
));
$this->add(array(
'name' => 'location_fieldset',
'type' => LocationFieldset::class, // this is a separate model/entity
));
}
}
Создание fieldsets: (обратите внимание закомментированы попыток гидратации)
class ServiceProviderFieldset extends Fieldset
{
public function init(){
//parent::__construct($name);
/*
$this
->setHydrator(new ClassMethodsHydrator(false))
->setObject(new ServiceProvider())
;
*/
/*
$this
->setHydrator(new ReflectionHydrator(false))
->setObject(new ServiceProvider())
;
*/
$this->add(array(
'type'=>'Hidden',
'name'=>'id',
'options'=>array(
'label' => 'Service Provider Id'
),
'attributes'=>array(
'id'=>'providerId'
)
));
}
}
Контроллер:
$provider = $this->findServiceProviderById($providerId); // this is set from DB call and correctly creates a Provider() object with populated values.
$location = $this->findServiceProviderLocationById($locId);
$form = $formManager->get(RegisterForm::class);
$form->bind($provider);
$form->bin($location);
// $form->get('service_provider_fieldset')->bindValues(...);
Вид:
$formElement = $form->get('service_provider_fieldset')->get('email');
etc...
Форма отображается правильно, но без заполненных данных.
ПРИМЕЧАНИЕ: НЕ использовать Доктрину, но я извлекаю данные из БД ОК. ПРИМЕЧАНИЕ: ЕСЛИ я устанавливаю этот флаг 'use_as_base_fieldset' => true,, тогда 1 из объектов (ServiceProvider) заполняет, наоборот, если я установил поля местоположения в значение «истина», то это заполняется. Я искал пару часов, проб и ошибок без успеха, и я надеюсь, что это просто моя усталость, которая пропустила простой шаг настройки/конфигурации, чтобы заставить это работать.
Резюме: Как вы заполняете 2 или более поля с 2 или более объектами внутри формы? Bind(), fieldset-> bindValues () ?,
Пробовал:
$form->get('service_provider_fieldset')->allowObjectBinding(true);
$form->get('service_provider_fieldset')->allowedObjectBindingClass(\Provider\Form\ServiceProviderFieldset::class);
Вот некоторые ссылки, которые близки, но до сих пор не могут заполнить оба набора полей через отдельные объекты. ZF2 Form Hydration with multiple objects and fieldsets https://framework.zend.com/manual/2.4/en/modules/zend.form.collections.html hydrating multiple objects from fieldsets ZF2
Коллекция (продукт/бренд/категория) пример подразумевает 'единую' коллекцию с помощью 'use_as_base_fieldset' => верно, используется для связывания() ...?
UPDATE: Я смог обработать процесс, используя пример документа коллекции в приведенной выше ссылке. Используйте один набор полей, который имитирует модель, которая имеет отношения 1: 1, 1: многие. Вопрос по-прежнему стоит - Как заполнить форму двух или более полей с несвязанными объектами –
Пример включает регистрационную форму с капчей. Я могу создать функцию addRecaptcha в форме, которая работает (но тогда я должен повторить это для каждой формы [или расширить абстрактную форму]) –
Вы решили свою проблему? У меня одно и то же ... одно предложение. форма 'init()' используется при получении набора полей с фабрики. если у вас просто простые входы, вы можете просто включить их в метод '__construct()' для набора или формы поля. –