Symfonyは昔はYamlで様々な入力検証を設定する事ができましたが、現在はDBテーブルの定義クラスであるエンティティ(Entity)で管理・設定する事ができるようになってから各DBテーブルの定義を総括して管理できるようになりました。
このページではバリテーションで使用する可能性が高いユニーク値である事を検証する方法を説明します。
ここでは一般的に使用する既にログイン認証の設定が完了したユーザー(User)の定義を例にします。
ログイン認証までの設定方法が不明な場合は以下を参照してください。
/src/Entity/User.php
は以下のようになっています。
<?php
namespace App\Entity;
use App\Repository\UserRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
* @Assert\Email()
*/
private $email;
設定方法
メールアドレスに設定する場合、以下のように設定します。
<?php
namespace App\Entity;
use App\Repository\UserRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
* @UniqueEntity("email")
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
* @Assert\Email()
*/
private $email;
以上で完了です。
クラスのアノテーションに設定する理由について
バリテーションの設定は各カラムの変数の宣言箇所のアノテーションに記述しますが、ユニークの設定に関しては、そのテーブルの何のカラムにユニークの設定をしているのかクラスの宣言部分のアノテーションに記載する事で管理しやすくなっているものと解釈すれば納得できるかと思います。
コメント