Symfonyアプリケーションでeasy-adminを使用しています。私のエンティティはDoctrineを通じて管理されています。
エンティティfieldTemplate
にリンクされたエンティティがField
あり、多対 1 の関係をPosition
介しています。
// App\Entity\FieldTemplate.php
/**
* @ORM\Entity(repositoryClass="App\Repository\FieldTemplateRepository")
*/
class FieldTemplate
{
/**
* @ORM\OneToMany(targetEntity="App\Entity\Position", mappedBy="fieldTemplate", cascade={"persist"}, orphanRemoval=true)
*/
private $positions;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Field", mappedBy="template", cascade={"persist"}, orphanRemoval=true)
*/
private $fields;
}
// App\Entity\Field.php
/**
* @ORM\Entity(repositoryClass="App\Repository\FieldRepository")
*/
class Field
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\FieldTemplate", inversedBy="fields", cascade={"persist"})
*/
private $template;
}
// App\Entity\Position.php
/**
* @ORM\Entity(repositoryClass="App\Repository\PositionRepository")
*/
class Position
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\FieldTemplate", inversedBy="positions")
* @ORM\JoinColumn(nullable=false)
*/
private $fieldTemplate;
}
リスナーを使用して、テンプレートfields
が既にリンクされている場合、テンプレートの削除または編集を防ぎ、ユーザーに新しいテンプレートを作成するように強制したいと思います。
// app\Listener\FieldTemplateListener.php
class FieldTemplateListener
{
public function preUpdate(LifecycleEventArgs $args)
{
$entity = $args->getObject();
if($entity instanceof FieldTemplate)
{
if (count($entity->getFields()))
throw new AccessDeniedException("this template has already field it cannot be changed");
}
}
public function preRemove(LifecycleEventArgs $args)
{
$entity = $args->getObject();
if($entity instanceof FieldTemplate)
{
if(count($entity->getFields()))
throw new AccessDeniedException('this template has already fields it cannot be removed');
}
}
}
それは私の中に登録されていますservices
#App\config\services.yaml
services:
App\EventListener\FieldTemplateListener:
tags:
- { name: doctrine.event_listener, event: preRemove, priority: 500 }
- { name: doctrine.event_listener, event: preUpdate, priority: 500 }
テンプレートを削除しようとすると、エラーがスローされますが、positions
との両方fields
が削除され、編集しようとすると、エラーはスローされません....
誰かが私が間違ったことを見ていますか?