【问题标题】:Embedding a Single Object嵌入单个对象
【发布时间】:2013-01-04 05:14:23
【问题描述】:

我是 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 中调用/kau.symfony2.com/vendor/symfony/src/Symfony/Component/Form/Util/PropertyPath.php 在第 347 行并在 /opt/lampp/htdocs/kau.symfony2.com/src/Acme/TaskBundle/Entity 中定义/Task.php 第 52 行"

我搜索了很多,但找不到解决方案。

文件路径: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';
    }
}
?>

文件路径: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>

文件路径: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';
    }
}
?>

【问题讨论】:

    标签: php symfony-2.0


    【解决方案1】:

    你能显示你的代码吗?因为那个错误告诉你你使用数组 - 当你应该使用类别对象的实例时

    // 显示 /Acme/TaskBundle/Entity/Task.php plz :)

    并尝试改变:

    $builder->add('category', new CategoryType());
    

    $builder->add('category', 'collection', array('type' => new CategoryType));
    

    【讨论】:

    • 感谢 sl4sh 的回复。正如你所说,我已经编辑了问题并添加了代码文件。
    • 我已经按照您的描述进行了更改,但它给出了错误:AcmeTaskBundle 中不存在对象“Symfony\Component\Form\FormView”的方法“名称”:默认值:new.html.twig在第 24 行'..错误发生在:{{ form_row(form.category.name) }} 在 new.html.twig 文件中。
    • 请注意,我在 new.html.twig 文件中包含了 4 行(从第 22 行到第 25 行)。

      类别

      {{ form_row(form.category.name) }}
    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多