В предыдущем вопросе я хотел знать, как запретить пользователю редактировать форму, если другой пользователь уже использовал ее.Поскольку я использую SF 2.8, я не могу использовать компонент блокировки (> SF3.4), поэтому я подумал сделать это вручную, с сущностью, управляющей замками.
для моей сущности мне нужно:
- user_id (пользователь, который редактирует форму, создает блокировку)
- entity_id (идентификатор отредактированной сущности)
- entity_class (FQCN для entityType)
- createAt (дата блокировки)
более того, мне нужно ограничение UniqueEntity для (user_id, entity_id и entity_class)
Вот где у меня проблема с отображением: сущность (id) может быть разного типа (у меня есть Профессия, Модуль, Учреждение, Пользователь ...)
Итак, с точки зрения доктрины, я нене понимаю, как я могу это сделать.
может быть, я смогу использовать идентификатор сущности, но потерять саму силу связей docrine / symfony.
/**
* Lockit.
*
* @ORM\Table(name="lockit")
*
* @UniqueEntity(
* fields={"entityClass", "entityId", "user"}
* )
*/
class Lockit
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* FQCN of the entity associated with the form to be locked.
*
* @var string
* @ORM\Column(name="entity_class", type="string")
*/
private $entityClass;
/**
* Entity id associated with the form to be locked.
* @ORM\Column(name="entity_id", type="integer")
*/
private $entityId;
/**
* @var \Simusante\SimustoryBundle\Entity\User
*
* @ORM\ManyToOne(targetEntity="Simusante\SimustoryUserBundle\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="userId", referencedColumnName="id", nullable=true)
* })
*/
private $user;
/**
* Date of the lock creation.
*
* @var \DateTime
* @ORM\Column(name="createdAt", type="datetime", nullable=true)
* @Assert\Date()
*/
private $createdAt;
Другим решением было бы создать какмного lockEntities, как я могу заблокировать сущность с. Я бы создал базовый замок, а затем ProfessionLock,InstitutionLock ... где я мог бы использовать «правильное» отображение.
/**
* @ORM\ManyToOne(targetEntity="Institution")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="institutionId", referencedColumnName="id", nullable=true)
* })
*/
private $user;
это будет работать, но это не так «оптимизировано», как могло бы.
возможно, есть другоепуть к этому, где мне не нужно создавать столько объектов, сколько у меня есть тип формы для блокировки.
Заранее спасибо