Symfony总是包含路由默认值



所以基本上我正在尝试实现这一点: Symfony 4.3 中的新功能:始终包含路由默认值

我有一个任务实体,它有多种状态,如新建打开关闭

出于这个原因,我正在尝试生成一个路由/tasks/new/tasks/open/tasks/closed. 但是,如果我的路由中没有设置选项,我希望它使用new作为默认值,并将其添加到 url 中。

我的控制器:

/**
* @Route("/tasks/{!status?new}", name="app_tasks")
*/
public function tasks(TaskRepository $taskRepository, string $status)
{
$tasks = $taskRepository->findBy(['status' => $status]);
return $this->render('tasks/index.html.twig', ['tasks' => $tasks]);
}

但是,这会导致没有单个匹配的路由。

/tasks/new  => no route found  => should work
/tasks/open => no route found  => should work
/tasks      => no route found  => should work & route should be /tasks/new
etc.

主要问题似乎是status之前的!。如果我完全删除它,一切都按预期工作,除了new任务的路由看起来像/tasks而不是/tasks/new- 我真正想要的。

我已经尝试清除缓存 - 虽然不起作用。Symfony版本是4.4.2。

github上有一个悬而未决的问题。 这可能会在较新版本中修复。

至于现在尝试使用以下方法:

@Route("/tasks/{!status}", name="app_tasks", defaults={"status": "new"})

也许您可以对相同的方法使用 2 条路由。一个有蛞蝓,如果没有被抓住,则默认一个。

或者,您可以使用控制器中的基本if进行检查,具体取决于 主要问题的故障 .

最新更新