Symfony 3 - 无法加载表单类型的类型

8
我刚把Symfony从2.7升级到3.0,出现了一些问题。它无法加载我的表单类型。以下是一个示例。
services.xml
app.search:
        class: AppBundle\Form\Type\SearchFormType
        tags:
            - { name: form.type, alias: app_search }

这是我尝试创建表单的方式。
$form = $this->createForm('app_search', new Search());

搜索表单类型

namespace AppBundle\Form\Type;

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

class SearchFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder->add('phrase', 'text');
    }

    public function getBlockPrefix()
    {
        return 'app_search';
    }
}

出现以下错误:

在模板渲染过程中抛出了一个异常(“无法加载类型“app_search””),位于....

在Symfony 3.0中应该如何解决?

谢谢!


1
我知道这听起来有点刻薄,但首先要查看的地方是文档:http://symfony.com/doc/current/book/forms.html#building-the-form。您会注意到表单别名(如“text”)已经消失了。这也在升级文件中提到。还有几十个最近的stackoverflow问题。 - Cerad
2个回答

8
你应该更改你的设置为...
app.search:
    class: AppBundle\Form\Type\SearchFormType
    tags:
        - { name: form.type }

在您的表单类型中

use Symfony\Component\Form\Extension\Core\Type\TextType;

    // ...
    $builder->add('phrase', TextType::class);

然后调用它使用...
$form = $this->createForm(SearchFormType::class, new Search());
// or $form = $this->createForm('AppBundle\Form\Type\SearchFormType', new Search());

长话短说,现在表单已不再使用名称作为引用,而是以类名作为引用。

我已经尝试过了。我得到了一个异常,在模板渲染期间抛出(“无法加载类型”text“”)。 - Tigran
1
请参见我上面那个有点讽刺且不太有帮助的评论。 - Cerad
是的,它起作用了,我明白了它应该如何工作。非常感谢! - Tigran

5

今天我被这个问题卡了大约2个小时。而问题很简单,就是表单类型的命名空间。在你的SearchFormType.php文件中,不要使用namespace AppBundle\Form\Type;,而应该写成namespace AppBundle\Form;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接