Я пытаюсь добавить динамическое имя таблицы для некоторых из моих сущностей.
Я прочитал этот пост [Имена динамических таблиц/сущностей в Doctrine 2][1] [1]: Динамические имена таблиц/сущностей в Doctrine 2 и это о слушателе доктрины [слушатель доктрины][2] [2] : http://doctrine-orm.readthedocs.org/en/latest/reference/events.html
Итак, вот как я пытаюсь это сделать:
Я создал объект с подстановочным знаком в имени таблицы:
<?php
namespace DD\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* SiteElec
*
* @ORM\Table(name="site_x_elec")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
* @ORM\EntityListeners({"DD\MyBundle\Entity\Listener\SiteElecListener"})
*/
class SiteElec
{
I skip properties with getters and setters
}
Затем я сделал прослушиватель для этого объекта:
<?php
namespace DD\MyBundle\Entity\Listener;
use DD\UserBundle\Entit\User;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* Listener pour l'entité siteElec.
*/
class SiteElecListener {
private $_tableName = null;
protected $token_storage;
protected $user;
public function getTableName() {
return $this->_tableName;
}
public function setTableName($tableName) {
$this->_tableName = $tableName;
return $this;
}
public function __construct(TokenStorageInterface $token_storage) {
$this->token_storage = $token_storage;
if($token_storage->getToken() != null){
}
}
/*
* @ORM\LoadClassMetadata
* @param LoadClassMetadataEventArgs $eventArgs
*/
public function loadClassMetadata(LoadClassMetadataEventArgs $args) {
//$this->user = $this->token_storage->getToken();
//var_dump($this->token_storage);
$classMetadata = $args->getClassMetadata();
$table = $classMetadata->table;
var_dump($classMetadata);
// $table['name'] = 'site_'.$this->user->getSite()->getId().'_elec';
// $classMetadata->setPrimaryTable($table);
}
}
Затем я объявляю своего слушателя в файле конфигурации:
dd.entity_listener.site_elec:
class: DD\MyBundle\Entity\Listener\SiteElecListener
arguments:
- "@security.token_storage"
tags:
- { name: doctrine.event_listener, event: loadClassMetadata }
Если я посмотрю на $classMetadata var, у меня будет только мой пользовательский объект и связанный объект, но не мой объект SiteElec.
Должно быть, я где-то ошибся, но не знаю где.
Есть идеи ? Спасибо