簡體   English   中英

堅持Symfony2形式和學說后重定向

[英]Redirect after persist Symfony2 form and Doctrine

在基於Symfony2的Web應用程序上,我正在開發一個頁面,可以在其中插入數據庫中的新記錄。 插入操作正常工作,無論如何,實際上在確認正確插入數據之后,但是Web應用程序以與插入數據時相同的形式返回了我。 如何將頁面重定向到另一條路線,例如到顯示新插入數據的頁面?

這是我的控制器中用於創建新記錄的操作:

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

            $form = $this->createForm(new AnagraficaType(), new Anagrafiche() );

            if ($request->isMethod('POST')) {
                $form->bind($request);

                if ($form->isValid()) {
$anagrafica = $form->getData();
                    $em->persist($anagrafica);
                    $em->flush();

                }
            }

            return $this->render('AcmeMyBundle:Anagrafica:new.html.twig', array('form' => $form->createView()));

}

這是用於頁面以創建新記錄的routing.yml部分:

AcmeMyBundle_newAnag:
    pattern: /anagrafica/new
    defaults: { _controller: AcmeMyBundle:Anagrafica:new}

這是該頁面的routing.yml部分,它允許我詳細顯示DB中我的“ anagrafica”對象的單個記錄:

AcmeMyBundle_showAnag:
    pattern:  /anagrafica/{id}
    defaults: { _controller: AcmeMyBundle:Anagrafica:show }
    requirements:
        _method:  GET
        id: \d+

這是我的控制器中管理頁面的操作,用於詳細顯示DB中我的“ anagrafica”對象的單個記錄:

public function showAction($id)
{
    $em = $this->getDoctrine()->getEntityManager();

    $anagrafica = $em->getRepository('AcmeMyBundle:Anagrafiche')->find($id);

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

    return $this->render('AcmeMyBundle:Anagrafica:show.html.twig', array(
        'anagrafica'      => $anagrafica,
    ));
}

這是new.html.twig視圖:

{% extends 'AcmeMyBundle::layout.html.twig' %}

{% block title %}{% endblock %}

{% block body %}
{{ form(form) }}

{% endblock %}

這是表單類型:

<?php
namespace Acme\MyBundle\Form\Type;

    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;

    class AnagraficaType extends AbstractType
    {
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Acme\MyBundle\Entity\Anagrafiche',
                'cascade_validation' => true,
            ));
        }

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

            // Create the form
            $builder->add('nome', 'text', array('label' => 'Nome: ', 'required' => false));
            $builder->add('cognome', 'text', array('label' => 'Cognome: ', 'required' => false));
            $builder->add('data_nascita', 'date', array('label' => 'Data nascita: ', 'required' => false));
            $builder->add('luogo_nascita', 'text', array('label' => 'Luogo Nascita: ', 'required' => false));
            $builder->add('indirizzo', 'text', array('label' => 'Indirizzo: ', 'required' => false));
            $builder->add('telefono', 'text', array('label' => 'Telefono: ', 'required' => false));
            $builder->add('email', 'text', array('label' => 'Email: ', 'required' => false));
            $builder->add('save', 'submit');

        }

        public function getName()
        {
            return 'anagrafica';
        }
    }

我需要提取新的持久記錄的ID,並在表單確認后自動重定向到/ anagrafica / $ id路由(AcmeMyBundle_showAnag)。

建議? 謝謝。

修改您的代碼,如下所示:

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

    $form = $this->createForm(new AnagraficaType(), new Anagrafiche() );

    if ($request->isMethod('POST')) {
        $form->bind($request);

        if ($form->isValid()) {
            $anagrafica = $form->getData();
            $em->persist($anagrafica);
            $em->flush();
            return $this->redirectToRoute('AcmeMyBundle_showAnag', array('id' => $anagrafica->getId()));            
        }
    }

    return $this->render('AcmeMyBundle:Anagrafica:new.html.twig', array('form' => $form->createView()));
}

這樣,一旦實體被保留,它將把您重定向到其顯示頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM