0

フォームの作成中にデフォルト値を設定できるという唯一の理由で FOSUserBundle をオーバーライドしようとしているので、フォームのロード時に不適切な検証メッセージが表示されません...

私はドキュメントに従っています。入れましたEtienne/UserBundle/Form/Type/RegistrationFormType.php

     <?php


     namespace Etienne\UserBundle\Form\Type;

     use Symfony\Component\Form\BaseType;
     use Symfony\Component\Form\FormBuilderInterface;
     use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

     class RegistrationFormType extends BaseType
   {

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder

        ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle'))
        ->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'))
        ->add('plainPassword', 'repeated', array(
            'type' => 'password',
            'options' => array('translation_domain' => 'FOSUserBundle'),
            'first_options' => array('label' => 'form.password'),
            'second_options' => array('label' => 'form.password_confirmation'),
            'invalid_message' => 'fos_user.password.mismatch',
        ))
    ;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => $this->class,
        'intention'  => 'registration',
    ));
   }

public function getName()
{
    return 'etienne_user_registration';
}
}

Etienne/UserBundle/Resources/config/services.yml:

 services:
     etienne_user.registration.form.type:
        class: Etienne\UserBundle\Form\Type\RegistrationFormType
        arguments: [%fos_user.model.user.class%]
        tags:
        - { name: form.type, alias: etienne_user_registration }

とでapp/config

 FOS_User
    registration:
         form:
             type: etienne_user_registration

次のエラー メッセージが表示されました。

/var/www/projet_etienne_auth/vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php 行 95

        if (!$type) {
            throw new FormException(sprintf('Could not load type "%s"', $name));
        }
        $this->resolveAndAddType($type);
4

2 に答える 2

3

問題は、Dependency Injection フォルダに EtienneUserExtension.php ファイルがなかったため (誤ったバンドル インストール)、services.xml をロードできなかったことです。

于 2012-12-18T16:00:20.213 に答える
1

BaseTypeこのコードでは、最初にSymfony のコンポーネントからクラスをインポートし、後でfromFormに同じ名前のエイリアスを定義します。RegistrationFormTypeFOS

 use Symfony\Component\Form\BaseType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolverInterface;
 use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

この宣言をドロップするだけで(必要ありません)、すべて問題ありません。

use Symfony\Component\Form\BaseType;
于 2012-12-12T23:34:24.537 に答える