表单未将帖子值绑定到实体

2024-05-26

我有一个学说实体、一个表单和 2 个字段集。 当我用值填充实体时,值会按预期合并到表单中。 当我尝试从表单数据创建实体时,它保持为空。

我一定是忘记了什么,但就是找不到它,我还有其他几种没有字段集的表单,它们按预期工作。

有任何想法吗?

下面发布了我的代码

Entity:

class User
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     * @ORM\Column(type="string", length=255, unique=true, nullable=true)
     */
    protected $username;

    ..
}

Form:

class CreateUserForm extends Form
{
    public function __construct(ObjectManager $objectManager)
    {
        parent::__construct('create-user');

        $this->setAttribute('method', 'post');

        // The form will hydrate an object 
        $this->setHydrator(new DoctrineHydrator($objectManager));

        $userFieldset = new UserFieldset($objectManager);
        $this->add($userFieldset);

        // … add CSRF and submit elements …
        $baseFieldset = new BaseFieldset($objectManager);
        $baseFieldset->setUseAsBaseFieldset(true);
        $this->add($baseFieldset);

    }
}

用户字段集:

class UserFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct($objectManager)
    {
        parent::__construct($name = 'user');

        $this->setHydrator(
            new DoctrineHydrator($objectManager, 'YrmUser\Entity\User')
        )->setObject(new User());     



        $this->add(
            array(
                'name' => 'username',
                'attributes' => array(
                    'type'  => 'text',
                    'placeholder' =>'Username',
                ),
                'options' => array(
                    'label' => 'Username',
                ),
            )
        );
        ...
    }
}

基本字段集:

class BaseFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct($objectManager)
    {
        parent::__construct('base');
        $this->setHydrator(new DoctrineHydrator($objectManager));
        $this->add(
            array(
                'name' => 'security',
                'type' => 'Zend\Form\Element\Csrf',
                'options' => array(
                    'csrf_options' => array(
                        'timeout' => 600
                    )
                )
            )
        );

        $this->add(
            array(
                'name' => 'submit',
                'attributes' => array(
                    'type'  => 'submit',
                    'value' => 'Save',
                    'class' => 'btn btn-success btn-lg confirm',
                ),
            )
        );

    }
}

控制器动作:

public function createAction()
{

    $form = new CreateUserForm($this->getObjectManager());
    $entity = new User();
    $form->bind($entity);

    $request = $this->getRequest();
    if ($request->isPost()) {
        $form->setData($request->getPost());
        if ($form->isValid()) {
            $this->getObjectManager()->persist($entity);
            $this->getObjectManager()->flush();
            return $this->redirect()->toRoute($this->redirect);
        }
    }

    return array(
        'form' => $form
    );
}

你可以 var_dump$form->getData() after $form->isValid() ?

或者,您可以尝试$form->isValid($request->getPost())代替setData().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

表单未将帖子值绑定到实体 的相关文章

随机推荐