Files
2025-08-14 22:41:49 +02:00

172 lines
3.8 KiB
PHP

<?php
/*
* This file is part of the Sonata Project package.
*
* (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Sonata\CoreBundle\Model;
use Doctrine\Common\Persistence\ManagerRegistry;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\Persistence\ObjectRepository;
/**
* @author Hugo Briand <briand@ekino.com>
*/
abstract class BaseManager implements ManagerInterface
{
/**
* @var ManagerRegistry
*/
protected $registry;
/**
* @var string
*/
protected $class;
/**
* @param string $class
* @param ManagerRegistry $registry
*/
public function __construct($class, ManagerRegistry $registry)
{
$this->registry = $registry;
$this->class = $class;
}
/**
* @return ObjectManager
*/
public function getObjectManager()
{
$manager = $this->registry->getManagerForClass($this->class);
if (!$manager) {
throw new \RuntimeException(sprintf(
'Unable to find the mapping information for the class %s.'
.' Please check the `auto_mapping` option'
.' (http://symfony.com/doc/current/reference/configuration/doctrine.html#configuration-overview)'
.' or add the bundle to the `mappings` section in the doctrine configuration.',
$this->class
));
}
return $manager;
}
/**
* {@inheritdoc}
*/
public function getClass()
{
return $this->class;
}
/**
* {@inheritdoc}
*/
public function findAll()
{
return $this->getRepository()->findAll();
}
/**
* {@inheritdoc}
*/
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
{
return $this->getRepository()->findBy($criteria, $orderBy, $limit, $offset);
}
/**
* {@inheritdoc}
*/
public function findOneBy(array $criteria, array $orderBy = null)
{
return $this->getRepository()->findOneBy($criteria, $orderBy);
}
/**
* {@inheritdoc}
*/
public function find($id)
{
return $this->getRepository()->find($id);
}
/**
* {@inheritdoc}
*/
public function create()
{
return new $this->class();
}
/**
* {@inheritdoc}
*/
public function save($entity, $andFlush = true)
{
$this->checkObject($entity);
$this->getObjectManager()->persist($entity);
if ($andFlush) {
$this->getObjectManager()->flush();
}
}
/**
* {@inheritdoc}
*/
public function delete($entity, $andFlush = true)
{
$this->checkObject($entity);
$this->getObjectManager()->remove($entity);
if ($andFlush) {
$this->getObjectManager()->flush();
}
}
/**
* {@inheritdoc}
*/
public function getTableName()
{
return $this->getObjectManager()->getClassMetadata($this->class)->table['name'];
}
/**
* Returns the related Object Repository.
*
* @return ObjectRepository
*/
protected function getRepository()
{
return $this->getObjectManager()->getRepository($this->class);
}
/**
* @param $object
*
* @throws \InvalidArgumentException
*/
protected function checkObject($object)
{
if (!$object instanceof $this->class) {
throw new \InvalidArgumentException(sprintf(
'Object must be instance of %s, %s given',
$this->class, is_object($object) ? get_class($object) : gettype($object)
));
}
}
}