我是Symfony2.0的新手。我是从网站http://symfony.com/doc/2.0/book/index.html学习的。我已经浏览了网站上给出的所有主题,但我没有得到主题为“嵌入单个对象”的输出,该主题包含在表单主题(http://symfony.com/doc/2.0/book/forms.html)中。我编写了“嵌入单个对象”的所有代码,但它没有输入数据库。当我提交表格时,它给出了我在下面说明的错误。我可以在不使用嵌入对象代码的情况下创建一个条目。
错误:“可捕获的致命错误:传递给Acme \ TaskBundle \ Entity \ Task :: setCategory()的参数1必须是Acme \ TaskBundle \ Entity \ Category的实例,给定的数组,在/ opt / lampp / htdocs中调用/ 347 /并在/opt/lampp/htdocs/kau.symfony2.com/src/Acme/TaskBundle/Entity /Task.php第52行“
我搜索了很多但找不到解决方案。
FilePath:Acme/TaskBundle/Form/Type/TaskType.php
<?php
// src/Acme/TaskBundle/Form/Type/TaskType.php
namespace Acme\TaskBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class TaskType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('task', 'text', array('max_length' => 20));
$builder->add('address', 'textarea', array('required' => true, 'read_only' => false));
$builder->add('dueDate', 'date');
$builder->add('category', new CategoryType());
}
public function getName()
{
return 'task';
}
}
?>
FilePath:Acme / TaskBundle / Resources / Views / Default / new.html.twig
<form action="{{ path('AcmeTaskBundle_newpage') }}" method="post" {{ form_enctype(form) }} novalidate>
{{ form_errors(form) }}
<div>
{{ form_errors(form.task) }}
{{ form_label(form.task, 'Task Description', { 'label_attr': {'class': 'task_field' }}) }}
{{ form_widget(form.task, { 'attr': {'class': 'task_field'} }) }}
</div>
<div>
{{ form_errors(form.address) }}
{{ form_label(form.address) }}
{{ form_widget(form.address) }}
</div>
<div>
{{ form_errors(form.dueDate) }}
{{ form_label(form.dueDate) }}
{{ form_widget(form.dueDate) }}
</div>
<h3>Category</h3>
<div class="category">
{{ form_row(form.category.name) }}
</div>
{{ form_rest(form) }}
<input type="submit" />
</form>
FilePath:Acme/TaskBundle/Form/Type/CategoryType.php
<?php
namespace Acme\TaskBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class CategoryType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name','text');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\TaskBundle\Entity\Category',
));
}
public function getName()
{
return 'category';
}
}
?>
答案 0 :(得分:0)
你能展示你的代码吗?因为错误告诉你你使用数组 - 当你应该使用Category
的对象的实例时// show /Acme/TaskBundle/Entity/Task.php plz:)
并尝试更改:
$builder->add('category', new CategoryType());
到
$builder->add('category', 'collection', array('type' => new CategoryType));