Php Symfony始终包含路由默认值
因此,基本上我正在努力实现这一目标: 我有一个任务实体,它有多个状态,如新建,打开,关闭 因此,我正在尝试生成路由Php Symfony始终包含路由默认值,php,symfony,symfony4,symfony-routing,Php,Symfony,Symfony4,Symfony Routing,因此,基本上我正在努力实现这一目标: 我有一个任务实体,它有多个状态,如新建,打开,关闭 因此,我正在尝试生成路由/tasks/new/tasks/open/tasks/closed。 但是,如果在我的路线中没有设置选项,我希望它使用new作为默认设置,并将其添加到url中 我的控制器: /** * @Route("/tasks/{!status?new}", name="app_tasks") */ public function tasks(TaskRepository $taskRep
/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.
主要问题似乎是代码>在状态之前
。如果我完全删除它,一切都会按预期工作,除了新任务的路径看起来像/tasks
,而不是/tasks/new
——我真正想要的
我已经尝试清除我的缓存-但没有工作。Symfony版本是4.4.2 对于同一种方法,您可以使用两条路线。一个带弹头,如果未捕获,则默认为一个
或者,根据主要问题的严重程度,您可以在控制器中使用基本的(如果)进行检查。上有一个未解决的问题。
这可能会在较新的版本中得到修复
至于现在,请尝试使用以下方法:
@Route("/tasks/{!status}", name="app_tasks", defaults={"status": "new"})