2

Symfony2 に基づく Web アプリケーションで、DB に新しいレコードを挿入できるページを開発しています。挿入操作は正常に機能しますが、実際にはデータが正しく挿入されていることを確認した後、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}

ここでは、DB 内の「anagrafica」オブジェクトの詳細な単一レコードを表示できるようにするページの routing.yml の部分を示します。

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

ここでは、ページを管理して DB 内の「anagrafica」オブジェクトの詳細な 1 つのレコードを表示するコントローラーのアクションを示します。

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

1 に答える 1

5

以下のようにコードを変更します。

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

そのため、エンティティが永続化されると、その表示ページにリダイレクトされます。

于 2013-09-30T11:45:50.657 に答える