私は、カスタムエンティティ&バリデータでユーザエンティティを検証したいと考えています。これまでのところ、フォームワークフローによってトリガされたときに働いているが、私はそれを手動でトリガした場合、私は検証呼び出す前に、1つのリレーションIのセットアップを失う:symfonyが手動でリレーションを持つエンティティを検証する
UserControllerで:サイトの関係に
$user = new User();
$user->setRoles($roles);
$user->setSite($site);
...
$violations = $this->container->get('validator')->validate($user);
Userエンティティ:
/**
* @var Site the site linked to the entity
* @ORM\ManyToOne(targetEntity="LCH\MultisiteBundle\Entity\Site", cascade={"all"})
* @ORM\JoinColumn(name="site_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $site;
バリ:
public function validate($user, Constraint $constraint)
{
$email = $user->getEmail();
// $site var is null while other "direct fields are filled
$site = $user->getSite();
$roles = $user->getRoles();
$username = $user->getUsername();
どのように私は手動でvalidatすることができますeこのエンティティは、先に設定された関係を使用しますか?
リポジトリから$サイトを取得するにはどうすればよいですか? – Edu
はい、find($ id)ビルトインメソッドで、$ idはフォームの型によって提供されます。 EntityManagerスコープの問題について考えていますか? – nbonniot
検証する前にユーザーを永続化させることができます – Edu