1

以前に登録した候補者が自分の登録に戻って、不足しているドキュメントを追加 (およびのみ) できるようにしたいと考えています。

これが私の見解です

<form action="{{ path('candidat_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}>

    {% if ((entity.file2)==0)%}                       
        {{ form_row(edit_form.file2, { 'label': 'file2' }) }}
    {% endif %}

    <p>
        <button class="btn-small" type="submit">update</button>
    </p>
</form>

ボタンの更新をクリックしても何も起こりません (ビューを表示するためのリダイレクトもアップロードもありません)

私のコントローラーの updateAction :

public function updateAction(Request $request, $id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('EtienneInscriptionBundle:Candidat')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Candidat entity.');
    }

    $deleteForm = $this->createDeleteForm($id);   
    $editForm = $this->createForm(new CandidatType(), $entity);  

    $editForm->bind($request);

    if ($editForm->isValid()) {
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('candidat_show', array('id' => $entity->getId())));
        #return $this->redirect($this->generateUrl('candidat_edit', array('id' => $id)));
    }

    return array(
        'entity'      => $entity,
        'edit_form'   => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    );
}      

CandidateType には、作成アクションで最初にすべてのフィールドを生成するビルダーが含まれています (CRUD ベースのコントローラー)

public function buildForm(FormBuilderInterface $builder, array $options)
{        

    $builder     
        ->add('name') ....etc...

何が間違っているかについてのアイデアはありますか? ありがとう

4

1 に答える 1

2

テンプレートでフォーム フィールドをフィルター処理することはお勧めできません。フォームを作成するときにオプションを使用することをお勧めします。これを行う方法の例を次に示します。

1) フォームにフィールドを追加する条件を設定します。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('field_a', 'type');
    // ...
    if ($options['allow_edit_field_b']) {
        $builder->add('field_b', 'text', array(
            'property_path' => false,
        ));
    }
    // ...

2) オプションを定義します。

 public function setDefaultOptions(OptionsResolverInterface $resolver) {
    $resolver->setDefaults(array(
        'allow_edit_field_b' => false,
        ));
 }

3) フォームを作成し、

    $form = $this->createForm(new YourType(), $yourObject, array(
        'allow_edit_field_b' => true,
    ));
于 2012-12-07T21:09:08.967 に答える