由于我使用symfony版本2.7时遇到的问题(安装项目后立即出现404页错误)我开始使用Symfony 3.0版。在一些小问题之后,我发现“app / console”被“bin / console”取代。所以我现在正在开发一个新项目,我已经用一个名为
的实体构建了一个新的bundleCodeit / RestaurantBundle&& CodeitRestaurantBundle:Reserveren
格式是注释,实体有一个id和1个字段,名为“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'
));
}
}
我的实体代码
<?php
namespace Codeit\RestaurantBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Reserveren
*
* @ORM\Table(name="reserveren")
* @ORM\Entity(repositoryClass="Codeit\RestaurantBundle\Repository\ReserverenRepository")
*/
class Reserveren
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Naam", type="string", length=255)
*/
private $naam;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set naam
*
* @param string $naam
*
* @return Reserveren
*/
public function setNaam($naam)
{
$this->naam = $naam;
return $this;
}
/**
* Get naam
*
* @return string
*/
public function getNaam()
{
return $this->naam;
}
}
答案 0 :(得分:27)
表格在3.0中发生了很大变化。你现在可能最好坚持使用2.8。
您没有显示它,但我怀疑,根据错误消息,您的控制器代码如下所示:
$form = $this->createForm(new ReservernType(), $item);
这是2.x的做事方式。对于3.x使用:
$form = $this->createForm(ReservernType::class, $item);
http://symfony.com/doc/current/book/forms.html#creating-form-classes
答案 1 :(得分:2)
尝试:
$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;
动机:来自upgrade guide:
不推荐使用类型名称,将在Symfony 3.0中删除。代替 按名称引用类型,您应该通过它们引用它们 完全限定的类名(FQCN)。使用PHP 5.5或更高版本,您 可以使用“class”常量:
希望这个帮助
答案 2 :(得分:1)
试试这样:
/.../
use Symfony\Component\Form\Extension\Core\Type\TextType;
/.../
class ReserverenType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('naam', TextType::class);
}
}
答案 3 :(得分:-1)
将此项添加到您实体的类替换名称中,并使用适合您的属性。
public function __toString() {
return $this->name;
}