Php 类型为“的预期参数”;字符串“&引用;供应商\NameBundle\Form\EntitynameType“;给定Symfony 3.0

Php 类型为“的预期参数”;字符串“&引用;供应商\NameBundle\Form\EntitynameType“;给定Symfony 3.0,php,formbuilder,symfony,Php,Formbuilder,Symfony,由于symfony 2.7版的问题(安装项目后立即出现404页错误),我开始使用symfony 3.0版。在一些小问题之后,我发现“app/console”被“bin/console”所取代。所以我现在正在做一个新项目,我已经用一个名为 Codeit/餐厅绑定和CodeitRestaurantBundle&CodeitRestaurantBundle:Reserveren 格式为注释,实体有一个id和一个名为“naam”(字符串,255)的字段。我更新了模式,生成了Codeit的实体,成功完成之

由于symfony 2.7版的问题(安装项目后立即出现404页错误),我开始使用symfony 3.0版。在一些小问题之后,我发现“app/console”被“bin/console”所取代。所以我现在正在做一个新项目,我已经用一个名为

Codeit/餐厅绑定和CodeitRestaurantBundle&CodeitRestaurantBundle:Reserveren

格式为注释,实体有一个id和一个名为“naam”(字符串,255)的字段。我更新了模式,生成了Codeit的实体,成功完成之后,我生成了一个带有写操作的crud。格式再次是注释前缀是/reserveren

因此,如果我访问web/reserveren页面,我将获得实体的显示页面。不幸的是,如果我尝试添加一个新条目,会出现以下错误:

给定的参数类型应为“string”,“Codeit\RestaurantBundle\Form\ReserverenType”

My Bundle/Form/ReserverenType.php

<?php

namespace Codeit\RestaurantBundle\Form;

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

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

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Codeit\RestaurantBundle\Entity\Reserveren'
    ));
}
}
像这样尝试:

/.../

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

/.../

class ReserverenType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
           $builder->add('naam', TextType::class);
    }
}

将其添加到实体的类中,并使用适合您的属性替换名称

public function __toString() {
    return $this->name;
}
尝试:

$builder
        ->add('naam', TextType::class);
        // If you use PHP 5.3 or 5.4 you must use
        // ->add('naam','Symfony\Component\Form\Extension\Core\Type\TextType')
而不是这个

$builder
    ->add('naam');
并添加
use
语句:

use Symfony\Component\Form\Extension\Core\Type\TextType;
动机:来自:

类型名称已弃用,将在Symfony 3.0中删除。相反 在按名称引用类型中,您应该按名称引用它们 改为完全限定类名(FQCN)。使用PHP5.5或更高版本,您可以 可以使用“类”常量来表示:


希望此帮助

表单在3.0中发生了很大变化。现在你最好还是坚持2.8

您没有显示它,但根据错误消息,我怀疑您的控制器代码如下所示:

$form = $this->createForm(new ReservernType(), $item);
这就是2.x的做事方式。对于3.x使用:

$form = $this->createForm(ReservernType::class, $item);

因此,在Bundle/Entity/Reserveren.php中,我必须在类的底部添加代码,并且必须替换
return$this->name
中返回$this->naam
?不幸的是,这不起作用(是的,现在是我上面的问题了!哦,那是另一个故事。你有没有尝试->添加('naam','text'))谢谢Cerad!这很好。我将重新考虑使用更知名的版本创建一个新项目。无论如何,谢谢!在新项目中使用3.x没有错。请注意,有相当多的S2信息不再适用。非常感谢,我对表单不起作用的原因非常生气,现在我知道了。我现在明白了@cerad响应:我发布的字段是字段类型猜测(不需要指定类型),但您需要的主要表单声明(类)类型
$form = $this->createForm(ReservernType::class, $item);