Php Zend Framework 2和条令2–如何正确保存表单/文档?
使用Zend Framework 2,我构建了一个简单的表单和相应的Doctrine 2实体。现在我想知道我如何正确地保存使用条令的形式 如果我理解正确的话,我可以使用hydrator来实现这一点——以数组格式发布的数据将被转换成一个对象,然后可以由条令或类似的东西来处理,这是正确的吗 当前我的表单如下所示: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() {
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是的,我已经这样做了。我也可以从数据库中读写,只是我真的不知道如何正确使用水合器。在某种程度上,表单输入和数据库字段/实体属性需要连接,但我不确定如何连接。我见过一些使用填充函数或交换数组的示例,但我怀疑将它们与一个填充函数或交换数组一起使用是否正确。