从 MVC 模式和 Symfony2 的角度来看,我可以稍微精简一下我的控制器代码,去掉一些持久化逻辑吗?例如,给定一个像这样的标准新动作:
public function newAction(\Symfony\Component\HttpFoundation\Request $request)
{
// Create a new entity and a new form type for managing
$entity = $this->createNewEntity();
$form = $this->createForm($this->createNewFormType(), $entity);
// If it's GET just return the view
if('GET' == $request->getMethod())
return array('form' => $form->createView());
// It's POST request so bind the form
$form->bindRequest($request);
// ... and if it's valid just persist the entity
if($form->isValid()) :
$em = $this->getEntityManager(); // Should be carried by controller?
$em->persist($entity); // Should be carried by controller?
$em->flush(); // Should be carried by controller?
// Redirect the user to the default page
return $this->redirect($this->getOnNewSuccessRedirectUrl($entity));
endif;
// Return the view plus errors
return array(
'errors' => $this->getValidator()->validate($entity),
'form' => $form->createView()
);
}
将该逻辑移至存储库是否正确?一个例子(警告:可能不起作用):
class BaseRepository extends \Doctrine\ORM\EntityRepository
{
/**
* Persist the entity (either new or existent)
*
* @param object $entity
*/
public function save($entity)
{
$em = $this->_em;
$em->persist($entity);
$em->flush();
}
/**
* Delete the entity.
*
* @param object $entity
*/
public function delete($entity)
{
$em = $this->_em;
$em->remove($entity);
$em->flush();
}
}
控制器代码将是:
if($form->isValid()) :
$this->getRepository()->save($entity);
// Redirect the user to the default page
return $this->redirect($this->getOnNewSuccessRedirectUrl($entity));
endif;