我直接遵循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);