Zend Framework 2&学说2 - 如何正确保存表格/水合作用?

时间:2015-05-11 18:38:06

标签: php doctrine-orm zend-framework2

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

如果我理解正确,我可以使用保湿器 - 数组格式的发布数据将转换为一个对象,然后可以由Doctrine(或类似的东西)处理,这是正确的吗?

目前我的表单如下:

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的函数,该函数将表单的发布数据映射到实体。我需要这样的功能吗?如何在不破坏任何内容的情况下更改字段名称?我的代码是正确的还是我做的事情不是他们应该如何做的?

我知道ZF2有一个使用实体getter / setter方法的ClassMethods保湿器 - Doctrine 2是否也这样做?

0 个答案:

没有答案