我正在编写一个使用 Zend Framework 2 和 Doctrine(都是最新的稳定版本)的应用程序。有很多文档(主要是教程和博客文章)结合 Zend Form 将教义实体保存到数据库中。不幸的是,它们只处理没有一对多或多对多关系的简单实体。
这是我在自己的代码中采用的示例之一。
http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/
我知道在这个例子的专辑实体中,艺术家是一个字符串,以使(已经很长的)教程尽可能简单。但在现实世界的情况下,这当然是与艺术家实体的一对多关系(甚至是多对多)。在视图中,可以显示可以选择艺术家的选择框,列出可以在数据库中找到的所有艺术家实体,因此可以选择正确的实体。
按照专辑的示例,这就是我在控制器中设置“编辑”操作的方式:
public function editAction()
{
// determine the id of the album we're editing
$id = $this->params()->fromRoute("id", false);
$request = $this->getRequest();
// load and set up form
$form = new AlbumForm();
$form->prepareElements();
$form->get("submit")->setAttribute("label", "Edit");
// retrieve album from the service layer
$album = $this->getSl()->get("Application\Service\AlbumService")->findOneByAlbumId($id);
$form->setBindOnValidate(false);
$form->bind($album);
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
// bind formvalues to entity and save it
$form->bindValues();
$this->getEm()->flush();
// redirect to album
return $this->redirect()->toRoute("index/album/view", array("id"=>$id));
}
}
$data = array(
"album" => $album,
"form" => $form
);
return new ViewModel($data);
}
如果艺术家不是一个字符串,而是一个艺术家实体,这个例子需要如何改变?
并且假设专辑也有多个 Track Entity,它们将如何处理?