Php Symfony2-使用自定义表单类型&x27;调用createForm;s名称/别名抛出“s”;无法加载类型“;例外
我正在阅读关于将表单定义为服务的文档,并遵循了指南。但我一直遇到以下错误: 无法加载类型“提交” 这是我的Php Symfony2-使用自定义表单类型&x27;调用createForm;s名称/别名抛出“s”;无法加载类型“;例外,php,forms,symfony,Php,Forms,Symfony,我正在阅读关于将表单定义为服务的文档,并遵循了指南。但我一直遇到以下错误: 无法加载类型“提交” 这是我的服务。yml services: submission.form.type.submission: class:Awesome\SubmissionBundle\Form\Type\SubmissionType tags: - {name: form.type, alias: submission} 这是我的表格 <?p
服务。yml
services:
submission.form.type.submission:
class:Awesome\SubmissionBundle\Form\Type\SubmissionType
tags:
- {name: form.type, alias: submission}
这是我的表格
<?php
namespace Awesome\SubmissionBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class SubmissionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('contact', 'text')
->add('message', 'textarea')
->add('submit', 'submit')
;
}
public function getName()
{
return 'submission';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Awesome\SubmissionBundle\Entity\Submission',
));
}
}
无论我将配置放在何处,命令container:debug submission.form.type.submission
总是给出相同的输出,这对我来说似乎很好:
[container] Information for service submission.form.type.submission
Service Id submission.form.type.submission
Class Awesome\SubmissionBundle\Form\Type\SubmissionType
Tags
- form.type (alias: submission)
Scope container
Public yes
Synthetic no
Required File -
还有一个问题:
它是data\u class
,而不是data
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Awesome\SubmissionBundle\Entity\Submission',
));
}
还有一个问题:
它是data\u class
,而不是data
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Awesome\SubmissionBundle\Entity\Submission',
));
}
我认为您的问题在于在编译器类中加载services.yml。 “form.type”标记的加载也发生在编译器类中(
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass
)。因此,您的CompilerPass在表单CompilerPass之后执行,它将找不到您的表单类型
如果您使用的是Symfony标准版,并且您已使用创建了捆绑包,则DependencyInjection文件夹中将有一个AwesomeSubmissionExtension
类,用于加载服务文件
以下代码是加载yaml文件时更改的扩展代码。(默认为XmlFileLoader)
我认为您的问题在于在编译器类中加载services.yml。 “form.type”标记的加载也发生在编译器类中(
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPass
)。因此,您的CompilerPass在表单CompilerPass之后执行,它将找不到您的表单类型
如果您使用的是Symfony标准版,并且您已使用创建了捆绑包,则DependencyInjection文件夹中将有一个AwesomeSubmissionExtension
类,用于加载服务文件
以下代码是加载yaml文件时更改的扩展代码。(默认为XmlFileLoader)
名称空间中的不匹配是您的复制/粘贴/编辑失败,对吗?类名称空间
Awesome\SubmissionBundle\Form\Type代码>与服务定义中的Guide\SubmissionBundle\Form\Type\SubmissionType
不匹配。你清除缓存了吗?@nifr是的,我已经编辑了。我已经编辑了你问题中的代码。请确保代码中没有选项卡。此外,我建议您坚持使用symfony2,即方法声明。执行this->createForm($this->get('submission.form.type.submission'),$submission)代码>工作?@nifr没有意识到我的IDE正在放置标签。谢谢你发现了!是的,这确实有效。但我仍然想知道为什么文档化的方式不起作用?你发布的内容应该有效。删除缓存。名称空间中的不匹配是您的复制/粘贴/编辑失败,对吗?类名称空间Awesome\SubmissionBundle\Form\Type代码>与服务定义中的Guide\SubmissionBundle\Form\Type\SubmissionType
不匹配。你清除缓存了吗?@nifr是的,我已经编辑了。我已经编辑了你问题中的代码。请确保代码中没有选项卡。此外,我建议您坚持使用symfony2,即方法声明。执行this->createForm($this->get('submission.form.type.submission'),$submission)代码>工作?@nifr没有意识到我的IDE正在放置标签。谢谢你发现了!是的,这确实有效。但我仍然想知道为什么文档化的方式不起作用?你发布的内容应该有效。删除缓存。
namespace Awesome\SubmissionBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
class AwesomeSubmissionExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}