問題: $form->bind($object) を使用すると、フォーム内の複数のフィールドセットが入力/水和されません。2 つの異なるエンティティ オブジェクトを使用して、2 つの異なるフィールドセットをフォームに入力するにはどうすればよいですか? 私は2つのフィールドセットを持っています:FieldsetA、FieldsetB
フォーム RegisterFrom は、その init() メソッドでこれらを呼び出します
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
));
}
}
フィールドセットの作成: (コメントアウトされたハイドレーションの試みに注意してください)
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...
フォームはビューに正しく表示されますが、データが入力されていません。
注: Doctrine は使用しませんが、DB からデータを取得します。注: このフラグを 'use_as_base_fieldset' => trueに設定すると、オブジェクト (ServiceProvider) の 1 つが入力されます。ロケーション フィールドを 'true' に設定すると、その逆になります。私は数時間、試行錯誤して成功していませんでした.
概要: フォーム内に 2 つ以上のエンティティを含む 2 つ以上のフィールドセットをどのように入力しますか? Bind(), フィールドセット->bindValues()?,
試した:
$form->get('service_provider_fieldset')->allowObjectBinding(true);
$form->get('service_provider_fieldset')->allowedObjectBindingClass(\Provider\Form\ServiceProviderFieldset::class);
これらはいくつかのリンクですが、別々のエンティティを介して両方のフィールド セットにデータを入力することはできません。 複数のオブジェクトとフィールドセットを使用した ZF2 フォーム ハイドレーション https://framework.zend.com/manual/2.4/en/modules/zend.form.collections.html フィールドセット ZF2 から複数のオブジェクトをハイドレートする
コレクション (製品/ブランド/カテゴリ) の例は、'use_as_base_fieldset' => trueを使用した '単一' コレクションを意味し、 bind() に使用されます...?