Php Zend Framework 2和条令2–如何正确保存表单/文档?

Php Zend Framework 2和条令2–如何正确保存表单/文档?,php,doctrine-orm,zend-framework2,Php,Doctrine Orm,Zend Framework2,使用Zend Framework 2,我构建了一个简单的表单和相应的Doctrine 2实体。现在我想知道我如何正确地保存使用条令的形式 如果我理解正确的话,我可以使用hydrator来实现这一点——以数组格式发布的数据将被转换成一个对象,然后可以由条令或类似的东西来处理,这是正确的吗 当前我的表单如下所示: use Zend\Form\Form; class MyForm extends Form { public function __construct() {

使用Zend Framework 2,我构建了一个简单的表单和相应的Doctrine 2实体。现在我想知道我如何正确地保存使用条令的形式

如果我理解正确的话,我可以使用hydrator来实现这一点——以数组格式发布的数据将被转换成一个对象,然后可以由条令或类似的东西来处理,这是正确的吗

当前我的表单如下所示:

use Zend\Form\Form;

class MyForm extends Form
{
    public function __construct()
    {
        parent::__construct('MyForm');

        $this->add(array(
            'type' => 'text',
            'name' => 'firstName',
            'options' => array(
                'label' => 'First Name',
            )
        ));

        $this->add(array(
            'type' => 'submit',
            'name' => 'submit',
            'options' => array(
                'label' => Submit'
            ),
            'attributes' => array(
                'value' => 'Submit Form',
            ),
        ));
    }
}
class Form
{
    protected $firstName;

    public function getFirstName()
    {
        return $this->firstName;
    }

    public function setFirstName($firstName)
    {
        $this->firstName = $firstName;
    }
}
以及这样的实体:

use Zend\Form\Form;

class MyForm extends Form
{
    public function __construct()
    {
        parent::__construct('MyForm');

        $this->add(array(
            'type' => 'text',
            'name' => 'firstName',
            'options' => array(
                'label' => 'First Name',
            )
        ));

        $this->add(array(
            'type' => 'submit',
            'name' => 'submit',
            'options' => array(
                'label' => Submit'
            ),
            'attributes' => array(
                'value' => 'Submit Form',
            ),
        ));
    }
}
class Form
{
    protected $firstName;

    public function getFirstName()
    {
        return $this->firstName;
    }

    public function setFirstName($firstName)
    {
        $this->firstName = $firstName;
    }
}
如您所见,字段名与实体中的相应变量相匹配。这是必需的吗?我使用以下控制器代码使其工作如下,但我认为这不是正确的方法:

use SomeForm\Form\MyForm;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;

class FormsController extends AbstractActionController
{
    public function saveAction()
    {
        $entityManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
        $hydrator = new DoctrineHydrator($entityManager);
        $request = $this->getRequest();
        $form = new MyForm();
        $form->setHydrator($hydrator);
        $entity = new \SomeForm\Entity\Form();
        $form->bind($entity);

        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);

            // Nothing is validated here
            if ($form->isValid()) {
                $entityManager->persist($entity);
                $entityManager->flush();
                return $this->redirect()->toRoute('home');
            }
        }
    }
}
在研究其工作原理时,我还遇到了一些代码示例,其中包含一个名为populate的函数,该函数将表单的post数据映射到实体。我需要这样一个函数吗?如何在不破坏任何内容的情况下更改字段名?我的代码是正确的还是我做的事情不是应该做的


我知道ZF2有一个使用实体getter/setter方法的ClassMethods或,Doctrine 2也这样做吗?

大多数硬东西看起来都是正确的。看起来表单无效的原因需要深入研究。您是否已将您的实体声明为条令实体(例如@ORM\entity)并正确映射了变量?@Svengali是的,我已经这样做了。我也可以从数据库中读写,只是我真的不知道如何正确使用水合器。在某种程度上,表单输入和数据库字段/实体属性需要连接,但我不确定如何连接。我见过一些使用填充函数或交换数组的示例,但我怀疑将它们与一个填充函数或交换数组一起使用是否正确。