3

Userを継承する独自のクラスがありFOS\UserBundle\Entity\Userます。さらに、独自の登録ルーチンを作成しました。今、フォームがユーザー名が一意であることを確認しないという問題があります。私はいつも得る:

SQLSTATE [23000]: 整合性制約違反: 1062 キー 'UNIQ_2DA1797792FC23A8' のエントリ 'myusername' が重複しています

ドキュメント1@UniqueEntity("email")に記載されているように注釈を追加しようとしましたが、効果はありませんでした。

誰かが何が間違っているのか知っていますか?

4

3 に答える 3

13

fos_user バンドルを使用している場合は、単純に UniqueEntity 制約を使用できます: http://symfony.com/doc/2.0/reference/constraints/UniqueEntity.html

それを実装するには、 User クラスに適切な use ステートメントが含まれていることを確認してから、次のように注釈を含めます (注釈を使用していると仮定します)。

<?php
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 * @UniqueEntity("email")
 * @UniqueEntity("username")
*/
class User extends BaseUser
{ /* ... */ }
于 2013-04-30T15:54:45.607 に答える
10

制約は FOS バンドルに既に存在します。おそらくvalidation_groups、フォームのオプションを に設定する必要がありますarray('Registration')

于 2012-01-05T16:52:21.000 に答える
0

validation.ymlユーザーエンティティの検証でこれを試すことができます:

constraints:    
    - FOS\UserBundle\Validator\Unique:
        property: usernameCanonical
        message:  'This username already exists. Please choose another one.'
于 2012-07-08T15:31:47.433 に答える