Symfony框架:如何让URL查询参数名称更具用户友好性
解决Symfony表单提交后URL查询参数名错误的问题
你当前的问题出在重定向时传递参数的方式:(array)$task->getTask()会将字符串类型的任务内容转为索引数组(格式为['History']),Symfony在生成路由时会把数组索引0作为查询参数名,导致URL出现?0=History。
要改成指定的参数名task,只需传递关联数组即可,同时修改接收参数的代码:
修正后的控制器代码
<?php namespace App\Controller; use App\Entity\Task; use App\Form\TaskType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\HttpFoundation\Response; class TaskController extends AbstractController { #[Route('/task', name: 'task')] public function taskForm(Request $request): Response { $task = new Task(); $form = $this->createForm(TaskType::class, $task); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // 传递关联数组,明确指定参数名'task' return $this->redirectToRoute('task_success', ['task' => $task->getTask()]); } return $this->render('Task/new.html.twig', [ 'form' => $form->createView(), ]); } #[Route('/task/success', name:'task_success')] public function taskResult(Request $request): Response { // 匹配新的参数名获取值 $query = $request->query->get('task'); return $this->render('Task/test.html.twig',[ 'task' => $query, ]); } }
关键修改说明
- 重定向环节:将
(array)$task->getTask()替换为['task' => $task->getTask()],直接定义参数名与对应值的映射 - 接收参数环节:将
$request->query->get('0')改为$request->query->get('task'),匹配重定向时设置的参数名
修改完成后,提交表单重定向后的URL会变为localhost/task/success?task=History,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user22377365
相关产品推荐
相关产品推荐

