将对象绑定到表单中的多个字段集 class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface { public function __construct($em) { .... $this->setHydrator(new Hydrator(false)) ->setObject(new User()); ... } ... }

将对象绑定到表单中的多个字段集 class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface { public function __construct($em) { .... $this->setHydrator(new Hydrator(false)) ->setObject(new User()); ... } ... },object,zend-framework2,bind,populate,fieldset,Object,Zend Framework2,Bind,Populate,Fieldset,有一个实体但有两个字段集,我发现在使用use_as_base_字段集选项时只填充了一个字段集 class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface { public function __construct($em) { .... $this->setHydrator(new Hydrator(false))

有一个实体但有两个字段集,我发现在使用use_as_base_字段集选项时只填充了一个字段集

  class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
        ....
        $this->setHydrator(new Hydrator(false))
             ->setObject(new User());
         ...
      }
   ...
   } 
有解决这个问题的办法吗

第一场集
  class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
        ....
        $this->setHydrator(new Hydrator(false))
             ->setObject(new User());
         ...
      }
   ...
   } 
第二场集

<?php
  use \Zend\InputFilter\InputFilterProviderInterface;
  use Zend\Stdlib\Hydrator\ClassMethods as Hydrator;
  use User\Entity\User;

  class CredentialsFieldset extends AbstractFieldset 
    implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
       .....

       $this->setHydrator(new Hydrator(false))
            ->setObject(new User());
       ....
       }
    ...
   }
实体本身包含两个字段集的属性。。。
  class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
        ....
        $this->setHydrator(new Hydrator(false))
             ->setObject(new User());
         ...
      }
   ...
   } 
绑定用户实体进行编辑时,只填充最后添加的字段集。当然,只能有一个基地集。。。
  class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
        ....
        $this->setHydrator(new Hydrator(false))
             ->setObject(new User());
         ...
      }
   ...
   } 

谁有主意,怎么解决这个问题

我认为这可以通过创建一个由两个字段集组成的新字段集来实现

  class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
        ....
        $this->setHydrator(new Hydrator(false))
             ->setObject(new User());
         ...
      }
   ...
   } 
class UserForm extends AbstractForm
{
   public function __construct()
   {

     $this->add(array(
         'type' => 'User\Form\Fieldset\UserFieldset',
         'options' => array(
             'use_as_base_fieldset' => true
         )
     ));


     ....
  }
然后UserFieldset将成为

<?php
namespace User\Form\Fieldset;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Stdlib\Hydrator\ClassMethods as ClassMethodsHydrator;

class UserFieldset extends Fieldset {

    public function __construct()
    {
        parent::__construct('user');
        ....
        $this->add(array(
            'type' => 'User\Form\Fieldset\ProfileFieldset',
        ));

        $this->add(array(
            'type' => 'User\Form\Fieldset\CredentialsFieldset',
        ));
       .....
    }

    public function init()
    {
        $this->setHydrator(new ClassMethodsHydrator(false))
            ->setObject(new User());
        ....
    }

    ....

}

我认为这可以通过创建一个由两个字段集组成的新字段集来实现

  class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
        ....
        $this->setHydrator(new Hydrator(false))
             ->setObject(new User());
         ...
      }
   ...
   } 
class UserForm extends AbstractForm
{
   public function __construct()
   {

     $this->add(array(
         'type' => 'User\Form\Fieldset\UserFieldset',
         'options' => array(
             'use_as_base_fieldset' => true
         )
     ));


     ....
  }
然后UserFieldset将成为

<?php
namespace User\Form\Fieldset;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Stdlib\Hydrator\ClassMethods as ClassMethodsHydrator;

class UserFieldset extends Fieldset {

    public function __construct()
    {
        parent::__construct('user');
        ....
        $this->add(array(
            'type' => 'User\Form\Fieldset\ProfileFieldset',
        ));

        $this->add(array(
            'type' => 'User\Form\Fieldset\CredentialsFieldset',
        ));
       .....
    }

    public function init()
    {
        $this->setHydrator(new ClassMethodsHydrator(false))
            ->setObject(new User());
        ....
    }

    ....

}

在对源代码进行了更详细的研究之后,我通过覆盖zend form的extract()方法找到了一个解决方案。在我看来,这是一种变通办法。考虑到字段集的含义,如果提供单个实体,我确实希望表单中的所有元素都使用本机填充方法。有什么是我监督的吗?在对源代码进行了更详细的调查之后,我通过覆盖zend form的extract()方法找到了一个解决方案。在我看来,这是一种变通办法。考虑到字段集的含义,如果提供单个实体,我确实希望表单中的所有元素都使用本机填充方法。有什么是我监督的吗?对任何评论都满意吗
  class ProfileFieldset extends AbstractFieldset implements InputFilterProviderInterface
  {
      public function __construct($em)
      {
        ....
        $this->setHydrator(new Hydrator(false))
             ->setObject(new User());
         ...
      }
   ...
   }