Symfony \ Component \ Form \ Exception \ InvalidArgumentException:无法加载类型“...”

时间:2017-05-24 19:15:21

标签: php forms symfony testing phpunit

这是我的表格:

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class JoseType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nombre')
            ->add('apellido')
            ->add('edad')
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Jose'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'appbundle_jose';
    }
}

这是我的考验:

use AppBundle\Form\JoseType;
use Symfony\Component\Form\Test\TypeTestCase;

class ProjectTypeTest extends TypeTestCase
{
    public function testForm()
    {
         $form = $this->factory->create(JoseType::class);

    }
}

要运行测试,请收到:

  

Symfony \ Component \ Form \ Exception \ InvalidArgumentException:无法加载类型“AppBundle \ Form \ JoseType”

我有symfony 2.6.13

在symfony 3.2中工作,但2.6不起作用,为什么? ......任何想法?

1 个答案:

答案 0 :(得分:1)

第一个问题是在symfony 2.6中你应该创建你的类型的实例并将它传递给create function。

$type = new JoseType();  $form = this->factory->create($type);

您编写的代码自2.8版开始有效。

第二个问题在

public function setDefaultOptions(OptionsResolverInterface $resolver)

因为symfony 2.7你应该使用

public function configureOptions(OptionsResolver $resolver) 

而不是setDefaultOptions函数。因此,您的代码将在symfony 2.6中运行,而不会在symfony 3.2

中运行