这是我的简单代码
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以显示其他对象。
最好的方法是什么?
祝你好运, 升。
答案 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)
}
}
这是完全合法的,您的前端同事会感谢您缺少重定向。