8

Symfony 2.0.12 プロジェクトを 2.1 にアップグレードしました。FosUserBundleもインストールしましたが、コマンドを実行すると

php composer.phar update

次に、composer がエラーを出力します。

Loading composer repositories with package information
Updating dependencies
Writing lock file
Generating autoload files
PHP Fatal error:  Declaration of User\UserBundle\Form\Type\RegistrationFormType::buildForm() must be compatible with that of Symfony\Component\Form\FormTypeInterface::buildForm() in /home/mark/dev/proj/src/User/UserBundle/Form/Type/RegistrationFormType.php on line 38

Fatal error: Declaration of User\UserBundle\Form\Type\RegistrationFormType::buildForm() must be compatible with that of Symfony\Component\Form\FormTypeInterface::buildForm() in /home/mark/dev/proj/src/User/UserBundle/Form/Type/RegistrationFormType.php on line 38
Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-update-cmd event terminated with an exception

以前の RegistrationFormType が新しい Symfony 2.1 フォーム インターフェイスと互換性がないことを示しています。

私の composer.json

// ...
"friendsofsymfony/user-bundle": "*",
//...

私のRegistrationFormType.php

<?php

namespace User\UserBundle\Form\Type;

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

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        parent::buildForm($builder, $options);
        // add your custom field
        $builder->add('name')
                ->add('surname')
                ->add('gender', 'choice', array(
                    'choices'   => array('m' => 'Male', 'f' => 'Female'),
                    'empty_value' => 'Please select',
                ))
                ->add('address')
                ->add('zip')
                ->add('country', 'country', array(
                    'empty_value' => 'Please select',
                ))
            ->add('dateOfBirth', 'date', array(
                'empty_value' => '',
                'years' => range(date('Y')-100, date('Y')),
            ))
            ->add('agree', 'checkbox', array(
                'label'     => 'Check here to agree to the sites terms and Conditions and Data Privacy Policy.',
            ));
    }

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

何が間違っているのですか?

4

1 に答える 1

19

あなたのbuildFOrmメソッドは古いスキーマを使用しています..これは変更されました:

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

また、必ず新しいものを含めてください。

use Symfony\Component\Form\FormBuilderInterface; 
于 2012-09-10T22:07:08.193 に答える