2013-09-30 103 views
1

後重定向我正在開發一個頁面,我可以在其中插入一條新記錄到我的數據庫。 Insert操作正常工作,無論如何實際上在確認數據被正確插入後,Web應用程序以我用於插入數據的同一表單返回我。我怎樣才能將頁面重定向到另一條路線,例如,顯示給我新的插入數據的頁面?在基於Symfony2的Web應用程序上保留Symfony2表單和Doctrine

在這裏,在我的控制器動作用於創建新的記錄:

 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} 

這裏部分路由.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)形成。

建議?謝謝。

回答

4

修改代碼,如下所示:

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())); 
} 

所以,一旦實體被持久化,它將您重定向到它的顯示頁面。

+0

完美。非常感謝。 – Fedro