如何生成表单并将“提交”按钮重定向到新页面?

时间:2015-06-02 09:48:07

标签: php symfony

我是Symfony2的新手。我有页面rapportrapport/addnew,我使用相同的表单。我需要做的是当用户在addnew填写表单时重定向到rapport,然后点击提交按钮。

以下是我在DefaultController中使用的功能:

public function showListAction (Request $request)
{   
    $mission = $this->getDoctrine()
                    ->getRepository('LRC203Bundle:Mission')
                    ->findAll();
    $form = $this->createForm(new RapportType(), $mission);
    return $this->render('LRC203Bundle:Default:rapport.html.twig', array('form' => $form->createView(), 'mission' => $mission ));
}

这是我的html.twig:

{% block body %}
    {% block missionsList %}
        <ul>
            {% for m in mission %}
                <li>    {{m.car}}   </li>
                <li>    {{m.name}}  </li>
            {% endfor %}
        </ul>
    {% endblock %}
    {% block newMission %}
        {{ form(form) }}
    {% endblock %}
{% endblock %}

控制器操作

public function rapportAction(Request $request) { 
    $mission = new Mission(); 
    $form = $this->createForm(new RapportType(), $mission); 
    $form->handleRequest($request); 

    if($form->isValid()) { 
        $em=$this->getDoctrine()->getManager(); 
        $em->persist($mission); $em->flush(); 
    } 

    return $this->render('LRC203Bundle:Default:rapport.html.twig', 
        array(
            'form' => $form->createView() 
        )
    ); 
}

RapportType

class RapportType extends AbstractType 
{
public function buildForm(FormBuilderInterface $builder, array $options) { 
$builder     
                ->add('car','text') 
                ->add('name','text')
                ->add('save', 'submit'); 
}


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

} 所以我需要的是将Submit按钮链接到addnew page。

2 个答案:

答案 0 :(得分:0)

所以实际上你是在正确的轨道上,你只需要添加:

if($form->isValid()) { 
    $em=$this->getDoctrine()->getManager(); 
    $em->persist($mission); $em->flush(); 

    return $this->redirect($this->generateUrl('your_path'));
} 

这样就可以了。

答案 1 :(得分:0)

如果你想通过控制器重定向,试试这个

symfony adwise

您可以尝试通过表单的“action”元素来计算出来,例如:

<form action="{{ path('task_new') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}

    <input type="submit" />
</form>

或通过这种方式

$form = $this->createFormBuilder($task)
->setAction($this->generateUrl('target_route'))
->setMethod('GET')
->add('task', 'text')
->add('dueDate', 'date')
->add('save', 'submit')
->getForm();

$form = $this->createForm(new FormType(), $obj, array( 'action' => 'whatever you need'));

并抓住回复