所以基本上我正在尝试实现这一点: 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
进行检查,具体取决于 主要问题的故障 .