如何使用redirectToRoute正确传递对象?

时间:2017-09-06 09:48:59

标签: symfony

这是我的简单代码

class LuckyController extends Controller
{
    public function taskFormAction(Request $request)
    {
        $task = new Task();
        //$task->setTask('Test task');
        //$task->setDueDate(new \DateTime('tomorrow noon'));

        $form = $this->createFormBuilder($task)
            ->add('task', TextType::class)
            ->add('dueDate', DateType::class)
            ->add('save', SubmitType::class, array('label' => 'Save'))
            ->getForm();

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid())
        {
            $task = $form->getData();

            return $this->redirectToRoute('task_ok', array('task' => '123'));
        }

        return $this->render('pre.html.twig', array('pre' => print_r($task, true), 'form' => $form->createView()));
    }

    public function taskOKAction(Task $task)
    {
        return $this->render('ok.html.twig', array('msg' => 'ok', 'task' => print_r($task, true)));
    }
}

和这一行

return $this->redirectToRoute('task_ok', array('task' => '123'));

重定向到taskOKAction,但它让我只通过URL发送参数(?task = 123)。

我需要将对象$ task发送到taskOKAction,以在屏幕上打印用户输入的内容。

我该怎么做?在问到好的解决方案是从表单存储数据(例如在数据库或文件中)并且只是在URL中传入对象的ID之前,我已经在stackoverflow上做了红色。我认为这是一个非常好的解决方案,但它增加了我的责任,检查用户是否没有更改URL中的ID以显示其他对象。

最好的方法是什么?

祝你好运, 升。

2 个答案:

答案 0 :(得分:2)

使用parameter converter正确填写路线

类似的东西(如果你对路线使用注释)

/**
 * @Route("/task/ok/{id}")
 * @ParamConverter("task", class="VendorBundle:Task")
 */
public function taskOKAction(Task $task)

如果参数只有一个,如果是类型提示(如你的情况),你也可以省略@ParamConverter部分

答案 1 :(得分:0)

从您的表单操作中,您可以在没有实际302重定向的情况下执行此操作:

public function taskFormAction(Request $request)
{
    $task = new Task();
    //$task->setTask('Test task');
    //$task->setDueDate(new \DateTime('tomorrow noon'));

    $form = $this->createFormBuilder($task)
        ->add('task', TextType::class)
        ->add('dueDate', DateType::class)
        ->add('save', SubmitType::class, array('label' => 'Save'))
        ->getForm();
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid())
    {
        $task = $form->getData();
        return $this-taskOKAction($task)
    }
}

这是完全合法的,您的前端同事会感谢您缺少重定向。