You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:33:23