【Symfony】バリデーション制約 UniqueEntity の基本的な使い方とエラーメッセージについて

symfony.com

UniqueEntityfields オプションを使うと指定したフィールドにユニーク制約をつけることができる。

App\Entity\Author:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: email

fields オプションは省略して記述してもよい。

App\Entity\Author:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: email

message オプションは制約違反したときのメッセージを定義することができ、 {{ value }} というプレースホルダーを含めると、違反したフィールドの値を出力することができる。

- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
    fields: email
    message: '{{ value }}は重複しています'

もし、2つ以上のフィールドの組み合わせがユニークになるように制約をつけたいならば、配列で指定することで実現できる。

App\Entity\Author:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: [email, username]
            message: 'メールアドレス{{ value }}は重複しています'

このとき message オプションの {{ value }} は配列の最初の要素が反映される。
もし、username についてメッセージを出力したいなら errorPath オプションを使って指定するとよい。

App\Entity\Author:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: [email, username]
            errorPath: username
            message: 'ユーザー名{{ value }}は重複しています'