如何在YAML路由配置中使用路由注解的EnumRequirement等效配置?
Symfony路由YAML配置中使用EnumRequirement的正确方式
你需要将PHP路由注解里的EnumRequirement约束转换为YAML配置,原PHP注解代码如下:
#[Route('/foo/{bar}', requirements: ['bar' => new EnumRequirement(SomeEnum::class)])]
在YAML路由配置中,不能直接用new关键字实例化类,正确的写法是使用Symfony支持的!php/new标签来实例化EnumRequirement,同时传递枚举类的完整命名空间作为构造参数。修改后的YAML配置如下:
foo_bar_controllers: resource: path: ../src/Controller/Foo/Bar namespace: App\Controller\Foo\Bar prefix: /{!_foobar} requirements: _foobar: !php/new Symfony\Component\Routing\Requirement\EnumRequirement - App\Enum\Foo\Bar # 替换为你的枚举类完整命名空间
注意事项:
- 确保你的枚举类实现了
BackedEnum接口(支持字符串或整数类型的枚举),这是EnumRequirement的要求; !php/new标签需要Symfony 6.1+版本支持,和你参考的官方文档版本一致;- 这种配置和PHP注解中的写法完全等效,会自动生成匹配枚举所有case值的路由正则约束。
内容的提问来源于stack exchange,提问作者Thibault - Crovitche
相关产品推荐
相关产品推荐

