0

ねえ、私のウェブサイトのすべてのページを 2 つの異なる言語で保存しています。現在 symfony2 で開発している管理領域でページを管理したいと考えています。

次のコントローラ コードは、データベースからの適切なデータを含む 2 つのフォームを同じページに表示できます。DE 言語を管理するための 1 つのフォームと EN 用の別のフォーム:

意見:

<form action="{{ path('admin_about') }}" method="post" {{ form_enctype(formEN) }}>
            {{ form_widget(formEN) }}

            <button type="submit" class="btn btn btn-warning" naem="EN">Save</button>
        </form>

        <form action="{{ path('admin_about') }}" method="post" {{ form_enctype(formDE) }}>
            {{ form_widget(formDE) }}

            <button type="submit" class="btn btn btn-warning" name="DE">Save</button>
        </form>

コントローラー: public function aboutAction(Request $request) {

    $pageEN = $this->getDoctrine()
    ->getRepository('MySitePublicBundle:Page')
    ->findOneBy(array('idName' => 'about', 'lang' => 'EN'));

    $pageDE = $this->getDoctrine()
    ->getRepository('MySitePublicBundle:Page')
    ->findOneBy(array('idName' => 'about', 'lang' => 'DE'));

    if (!$pageDE) {
        throw $this->createNotFoundException('About page (DE) not found.');
    }

    if (!$pageEN) {
        throw $this->createNotFoundException('About page (EN) not found.');
    }

    $formDE = $this->createFormBuilder($pageDE)
        ->add('title', 'text')
        ->add('content', 'text')
        ->getForm();

    $formEN = $this->createFormBuilder($pageEN)
        ->add('title', 'text')
        ->add('content', 'text')
        ->getForm();

    //Save Form here

    return $this->render('MySitePublicBundle:Admin:about.html.twig', array(
        'aboutPageDE' => $pageDE, 'aboutPageEN' => $pageEN, 'formDE' => $formDE->createView(), 'formEN' => $formEN->createView(),
    ));
}

私の質問は: 1 つのコントローラーから使用されたフォームを保存する方法は?

4

2 に答える 2

2

Symfony2 Docs のForms and Doctrineセクションに基づく(または、あなたの場合はForm クラスを使用していないため) --

したがって、 andを保存するように//save form here設定したと仮定した場合(および通常のゲッター/セッターがあります)。MySitePublicBundle:PageTitleContent

if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);

    // data is an array with "title" and "content" keys
    $data = $form->getData();

    // You'll need to have some switch depending on which language you're dealing
    // with... (unless its both, then just repeat for $pageDE)

    $pageEn->setTitle($data['title']);
    $pageEn->setContent($data['content']);

    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($pageEn);
    $em->flush();
}
于 2012-07-11T22:15:04.213 に答える
1

コントローラで、リクエストに次のようなフォームが含まれているかどうかをテストできます。

if($this->getRequest()->get('form1')) {
    //
} elseif($this->getRequest()->get('form2')) {
    //
}
于 2012-07-11T16:18:47.583 に答える