Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
API中的Symfony 4.3路由冲突_Api_Symfony_Symfony4 - Fatal编程技术网

API中的Symfony 4.3路由冲突

API中的Symfony 4.3路由冲突,api,symfony,symfony4,Api,Symfony,Symfony4,当我尝试在不传递任何参数的情况下访问API车辆类别时,symfony会使用第一个车辆API并将“类别”解释为参数。我怎样才能避免这种行为? 两个API都在同一个控制器中。如果您的“id”始终是一个整数,您可以在路由中添加一个要求以避免冲突 * @Route("/vehicle/{id}", methods={"GET"}) * @Route("/vehicle/categories/", methods={"GET"}) 路由是按顺序加载的,所以将第二个方法的代码移到第一个方法之前(在控制器

当我尝试在不传递任何参数的情况下访问API车辆类别时,symfony会使用第一个车辆API并将“类别”解释为参数。我怎样才能避免这种行为? 两个API都在同一个控制器中。

如果您的“id”始终是一个整数,您可以在路由中添加一个要求以避免冲突

* @Route("/vehicle/{id}", methods={"GET"})

* @Route("/vehicle/categories/", methods={"GET"})

路由是按顺序加载的,所以将第二个方法的代码移到第一个方法之前(在控制器内部),并在尝试之前清除缓存。是的,已经找到了,但这真的是“正确”的解决方案吗?我担心有人会在某个时候重新更改代码,这会破坏一切……如果您的代码可以被不知道Symfony如何工作的人修改,我认为这不是您将来可能遇到的唯一问题;)PS:不管怎样,如果你引入功能测试,你可以降低发生这种情况的风险,你会在“id”中添加任何类型的需求吗?它应该始终是一个整数。如果您的路由重叠,您需要创建更好的定义。我会为另一个路由使用不同的名称,因为它与带参数的路由太接近。注意,如果您更喜欢true@Maximeeychene的语法,您还可以使用@route(“/vehicle/{id}”),methods={“GET”},requirements={“id”:“\d+”},我将编辑我的答案,谢谢!
 @Route("/vehicle/{id<\d+>}", methods={"GET"})
@Route("/vehicle/{id}", methods={"GET"}, requirements={"id": "\d+"})