1

私は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は、/ opt / lampp / htdocs/kauで呼び出されたAcme\TaskBundle \ Entity\Categoryのインスタンスである必要があります。 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';
    }
}
?>

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>

ファイルパス: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';
    }
}
?>
4

1 に答える 1

0

あなたのコードを見せてもらえますか? 配列を使用することを伝えるエラー - カテゴリのオブジェクトのインスタンスを使用する必要がある場合

// /Acme/TaskBundle/Entity/Task.php を表示 plz :)

変更してみてください:

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

$builder->add('category', 'collection', array('type' => new CategoryType));
于 2013-01-04T07:23:34.830 に答える