1

問題: $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() に使用されます...?

4

2 に答える 2