![](/img/trans.png)
[英]Symfony2 persist form collections with Doctrine UNIQUE INDEX and ORDER BY?
[英]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.