0

FOS User Bundleを使用していて、検証ファイルFOS / UserBundle / Resources / config /validaiton.xmlをオーバーライドしたい:

<constraint name="FOS\UserBundle\Validator\Unique">
    <option name="property">usernameCanonical</option>
    <option name="message">fos_user.username.already_used</option>
    <option name="groups">
        <!-- <value>Registration</value> -->
        <value>Profile</value>
    </option>
</constraint>

ユーザー名は私の登録フォームにありません(私はそれを非表示に設定しました)、それは検証がエラーを生成するべきではないということです...

たぶん、フォームのユーザー名を削除するより良い方法があります...

4

2 に答える 2

2

フォームのユーザー名フィールドを適切な方法で削除するには、 をオーバーライドしてRegistrationFormType、独自のフィールドを作成し、元の FOSUserBundle から拡張する必要があります。

<?php
namespace Acme\UserBundle\Form\Type;
use Symfony\Component\Form\FormBuilder;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('email', 'email')
                ->add('plainPassword', 'repeated', array('type' => 'password'))

                // your other custom fields, if any.

    }
}

ここで、オーバーライドされたフォームをサービスとして宣言し、オーバーライドされたフォームを使用していることを FOSUserBundle 構成ファイルに伝える必要があります。ここに完全なドキュメントがあります

于 2012-04-03T17:06:31.280 に答える
1

エンティティ検証情報は任意のvalidation.ymlファイルに入れることができます。だからあなたはすることができます

#validation.yml
FQCN\Of\User\Entity:
  constraints:
    - FOS\UserBundle\Validator\Unique:
        property: usernameCanonical
        groups: [Profile]
        message: fos_user.username.already_used


  properties:
  # property validations here
于 2012-03-29T12:59:45.820 に答える