首先,创建您的管理器。在我的例子中,我为位于CoreBundle中的Item类创建了管理器:
<?php
namespace Sybio\Bundle\CoreBundle\Manager;
use Sybio\Bundle\CoreBundle\Entity\Item;
class ItemManager
{
protected $em;
protected $repository;
protected $entityName;
public function __construct(EntityManager $em, $entityName)
{
$this->em = $em;
$this->repository = $em->getRepository($entityName);
$this->entityName = $entityName;
}
public function save($entity)
{
$this->persistAndFlush($entity);
return $entity;
}
public function remove($entity)
{
return $this->removeAndFlush($entity);
}
protected function persistAndFlush($entity)
{
$this->em->persist($entity);
$this->em->flush();
}
protected function removeAndFlush($entity)
{
$this->em->remove($entity);
$this->em->flush();
}
public function getRepository()
{
return $this->repository;
}
public function createNewObject()
{
return new Item();
}
}
如果多个管理器共享同一管理结构,您可以创建一个被所有其他管理器扩展的BaseManager!然后在您的Bundle的services.yml(或xml)文件中注册它:
parameters:
sybio.item_manager.entity: SybioCoreBundle:Item
sybio.item_manager.class: Sybio\Bundle\CoreBundle\Manager\ItemManager
services:
sybio.item_manager:
class: %sybio.item_manager.class%
arguments: [@doctrine.orm.entity_manager, %sybio.item_manager.entity%]
就这样,您现在可以使用它了:
// Controller:
$im = $this->get('sybio.item_manager');
$item = $im->createNewObject();
$im->save($item);
你可以优化你的管理器,这里我给我的管理器一系列的配置参数:
sybio.item_manager:
class: %sybio.item_manager.class%
arguments: [@doctrine.orm.entity_manager, %sybio.item_manager.entity%, {'item_removed_state': %item_removed_state%, 'item_unpublished_state': %item_unpublished_state%, 'item_published_state': %item_published_state%}]
// src/Sybio/Bundle/CoreBundle/Manager/ItemManager.php:
public function __construct(EntityManager $em, $entityName, $params = array()) {
// ...
$this->params = $params;
}
如果您创建一个BaseManager,还可以创建一个有用的通用方法来初始化对象:
public function createNewObject()
{
$entityName = explode(":", $this->entityName);
$entityName = "Sybio\Bundle\CoreBundle\Entity\\".$entityName[1];
return new $entityName;
}