symfony2 - 将表单定义为服务导致错误 无法加载类型“公司”


symfony2 - Defining Form as a Service result in error Could not load type "company"

我直接遵循Symfony2关于表单的书,现在我被困在 http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services

把它做得和书中一模一样,所以我有一个名为公司的实体,我为它创建了一个类型:

namespace Core'CoreBundle'Form'Type;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolverInterface;
class CompanyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', 'text')
            ->add('description', 'textarea')
            ->add('type', 'choice',array(  
                'choices' => array("farboo"=>"far","boo"=>"foo","bar"=>"barfoo","boofar"=>"foobar")
                ))
            ->add('save', 'submit');
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Core'CoreBundle'Entity'Company',
        ));
    }
    public function getName()
    {
        return 'company';
    }
}

使用它时可以完美地工作,例如:

$company = new Company();
$form = $this->createForm(new CompanyType(),$company);

现在我想把它作为一个服务使用,就像Symfony Book中所描述的那样,所以我把它添加到我的工作服务中:

core.form.type.company:
    class: Core'CoreBundle'Form'Type'CompanyType
    tags:
        - { name: form.company, alias: company }

Symfony的书说:"就是这样!现在,您可以直接在控制器中使用表单类型:"

但是当我这样做时:

$company = new Company();
$form = $this->createForm('company',$company);

它抛出异常:

"Could not load type "company"

我错过了什么? 缺少什么文档?

您的服务定义不正确,应该是这样的:

core.form.type.company:
    class: Core'CoreBundle'Form'Type'CompanyType
    tags:
        - { name: form.type, alias: company }

并像这样使用它:

$form = $this->createForm('company' /* <- alias */,$company);