2013-09-30 1 views
1

в веб-приложении на основе Symfony2 Я разрабатываю страницу, на которой я могу вставить новую запись в свою БД. Операция Insert работает правильно, так или иначе, после подтверждения, что данные правильно вставлены, но веб-приложение возвращает меня в той же форме, что и я, чтобы вставлять данные. Как перенаправить страницу на другой маршрут, например, на страницу, где показаны новые вставленные данные?Перенаправление после сохранения формы 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} 

Здесь часть routing.yml для страницы, которая позволяет мне показать подробную запись моих объектов «anagrafica» в БД:

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

Здесь действие в мой контроллер, управлять страницу, чтобы показать подробную одну запись моих объектов «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'; 
     } 
    } 

Мне нужно извлечь идентификатор новой сохранялось записи, и автоматически перенаправлять на маршрут/anagrafica/$ ид (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

Perfect. Большое спасибо. – Fedro

Смежные вопросы