2

私のエンティティには、配列フィールドがあります:

/**
 * @var array
 *
 * @ORM\Column(name="work_experience", type="array")
 */
private $workExperience;

今、この配列フィールドに渡されるテキスト フィールドのコレクションをレンダリングしたいと考えています。

->add('workExperience', 'collection', array(
                'type'         => 'text',
                'allow_add'    => true,
                'allow_delete' => true,
                'prototype'    => true,
                #'by_reference' => false,
                'options'  => array(
                    'required'  => false,
                    'attr'      => array('class' => 'line-box')
                ),
            ))

しかし、今このフィールドをレンダリングすると、入力が表示されませんか? 私の間違いは何ですか?

{{ form_row(form.workExperience) }}

ありがとうございました

4

1 に答える 1

1

プロトタイプを作成するとき、コレクション フィールドは、エンティティにコントローラ内で値が割り当てられている場合にのみレンダリングされworkExperienceます。それ以外の場合は、javascript を使用してプロトタイプ情報を取得し、入力フィールドを作成する必要があります。これは、次の場合にも当てはまります。エンティティに値があるかどうかに関係なく、新しいフィールドを追加したい。

以下を値でレンダリングするには

{{ form_row(form.workExperience) }}

次のようなことができます。

public function controllerAction(Request $request)
{
    //By populating your entity with values from your database
    //workExperience should receive a value and be rendered in your form.
    $em = $this->getDoctrine()->getManager();
    $entity = $em
       ->getRepository('yourBundle:entity')
       ->findBy(...yourParameters...);


$form = $this->createForm('your_form_type', $entity);
...

または

...
//If you do not have any data in your database for `workExperience` 
//then you would need to set it in your controller.

$arr = array('email' => 'name@company.com', 'phone' => '888-888-8888');
$entity->setWorkExperience($arr);
$form = $this->createForm('your_form_type', $entity);
...

コレクションは通常、1 対多または多対多の関係に使用されることに注意してください。配列に使用することはできますが、それについてはあまり文書化されていません。このリンクは完全に適合するものではありませんが、提示された一般的なアイデアの多くは役に立ちます

于 2013-10-19T17:27:24.500 に答える