3

CraueFormFlowBundleを使用して複数ページのフォームを作成しました。このフォームを使用して、新しいエンティティ オブジェクトを作成したり、既存のエンティティ オブジェクトを編集したりできます。

次に、設定を追加しました

protected $allowDynamicStepNavigation = true;

フォームのページを前後に移動できるようにしますが、フォームを使用して既存のオブジェクトを編集する場合、フォーム内の任意のページに直接ジャンプできるようにしたいと考えています。これは機能していないようです。オブジェクト データが読み込まれ、目的のページに到達するまで [次へ] を繰り返し押すことができます。
CraueFormFlowBundle を使用して編集するときにページ ナビゲーションをレンダリングする方法はありますか?

私のテンプレートには以下が含まれます:

{% include 'CraueFormFlowBundle:FormFlow:stepList.html.twig' %} 

ナビゲーションを作成します。編集アクションは次のとおりです。

    public function editDriverAction($id) {

    $em = $this->getDoctrine()->getManager();

    $formData = $em->getRepository('NewgtDriverBundle:NewgtDriver')->find($id);

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

    //$formData = new NewgtDriver(); // Your form data class. Has to be an object, won't work properly with an array.

    $flow = $this->get('newgtDriver.form.flow.createDriver'); // must match the flow's service id
    $flow->bind($formData);

    // form of the current step
    $form = $flow->createForm();
    if ($flow->isValid($form)) {
        $flow->saveCurrentStepData($form);

        if ($flow->nextStep()) {
            // form for the next step
            $form = $flow->createForm();
        } else {
            // flow finished
            $em = $this->getDoctrine()->getManager();
            $em->persist($formData);
            $em->flush();

            $flow->reset(); // remove step data from the session

            return $this->redirect($this->generateUrl('driver')); // redirect when done
        }
    }

    return $this->render('NewgtDriverBundle:Driver:new.html.twig', array(
        'form' => $form->createView(),
        'flow' => $flow,
    ));
}
4

1 に答える 1

1

ソース コードでは、フロー クラスがメソッド loadStepDescriptions をオーバーライドする必要があることがわかります。

私のFromFlowクラスは次のようなものです:


namespace MyBundle\Form\Proposal;

use Craue\FormFlowBundle\Form\FormFlow;

class ProposalFlow extends FormFlow {

    protected $maxSteps = 5;

    protected $allowDynamicStepNavigation = true;

    protected function loadStepDescriptions() {
        return array(
            'Name',
            'Contract',
            'Filter',
            'Alternative',
            'Summary',
        );
    }
}

この助けを願っています

于 2014-09-24T04:22:40.737 に答える