Symfony,创建表单输入"保存并保留"服务

时间:2016-06-09 16:36:16

标签: php symfony

场合

我有一个处理页面编辑的控制器。

/**
 * Update a page
 * @ParamConverter("page", class="AcmeBundle:Page", options={"id" = "page_id"})
 */
public function editAction(Page $page, Request $request)
{
    $form = $this->createForm(PageType::class, $page);

    if ($form->handleRequest($request)->isSubmitted() && $form->isValid()) {
        $this->getDoctrine()->getManager()->flush();

        $this->addFlash('success', 'page_admin.flash.updated');

        if ($form->get('save_and_stay')->isClicked()) {
            return $this->redirect($request->headers->get('referer'));
        }
        else {
            return $this->redirectToRoute('acme_page_admin_index');
        }
    }

    return $this->render('AcmeBundle:PageAdmin:edit.html.twig', array(
        'form' => $form->createView()
    ));
}

我的表单包括两个提交按钮,一个用于保存页面并返回索引,一个用于保存页面并保留在编辑表单中。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('headline')
        ->add('body')
        ->add('save', SubmitType::class)
        ->add('save_and_stay', SubmitType::class)
    ;
}

问题

提交表单后,我只需检查单击了哪个按钮并执行正确的操作。但我想我需要为此服务而且我不确切知道如何做。如何命名(acme.form.save_and_stay?),在哪里存储它(AcmeBundle\Service\SaveAndStay?)。

我在使用这些服务组织我的Symfony应用程序时遇到了一些困难,并了解何时应该使用它们。

1 个答案:

答案 0 :(得分:1)

我认为你不需要服务。你可以像这样重写中间部分:

    if ($form->handleRequest($request)->isSubmitted() && $form->isValid()) {

        [...]

        if ($form->get('save')->isClicked()) {
            return $this->redirectToRoute('acme_page_admin_index');
        }
    }
    return $this->render('AcmeBundle:PageAdmin:edit.html.twig', array(
        'form' => $form->createView()
    ));

因此,您将检查是否单击了保存并转到索引的按钮 - 如果是,则重定向到那里。否则只需使用插入的值再次渲染表单。

相关问题