在Symfony2项目中,我想制作一个加载的配置文件,并为每个表单字段指示是否显示字段,是否需要显示字段,具体取决于&#的某些属性34;项目"实体。
parameters:
fieldProperty:
MyProfile:
Name:
Label: 'Your name'
ProjectType:
IT: 2
Non-It: 2
Hybrid: 2
ProjectSize:
Small: 2
Medium: 2
Large: 2
Massive: 2
ProjectComplexity:
Low: 2
Medium: 2
High: 2
ProjectTimingUrgency:
Regular: 2
Urgent: 2
Mandatory: 2
Critical: 2
HighlyCritical: 2
Sensitivity: 'none'
Nickname:
Label: 'Your nickname'
ProjectType:
IT: 0
Non-It: 0
Hybrid: 0
ProjectSize:
Small: 0
Medium: 0
Large: 0
Massive: 0
ProjectComplexity:
Low: 0
Medium: 0
High: 1
ProjectTimingUrgency:
Regular: 0
Urgent: 0
Mandatory: 0
Critical: 0
HighlyCritical: 1
Sensitivity: 'none'
我还用它来确定给定字段的表单标签。考虑到我有类似2000字段的东西,我认为使formBuilder的attr
的{{1}}部分动态是优雅的,所以例如如果它是类型的" textarea的"然后在$builder->add
部分中期望定义行数的参数attr
。这基本上意味着我需要定义YAML文档的正确结构:如果字段A存在且类型为"无论"然后期望字段B(甚至可能指定如果没有字段B则默认为" 4")等等。
我基本上需要一个结构化的解析器。考虑一下第一个孩子" fieldProperty属性是一个实体名称,因此解析器不必指望那里的某个单词,只需要字符串。以下子项的相同故事是字段名称(在下面的示例中,实体是" myProfile"以及2个字段是"姓名"以及"昵称") 。从那一刻开始,结构进入游戏。
是否可以在YAML中使用,或者我必须切换到XML,这对人类不太友好?
答案 0 :(得分:0)
您需要以某种方式指定您的结构,Kwalify或其他一些架构验证器可以帮助您。
如果你熟悉编程,你可以在YAML中做些什么。有趣的是,您的YAML文件仅包含基本标量,映射和序列,但您的描述似乎表明映射更像是具有(或应该具有)某些属性的对象。
使用标准YAML标记,您可以指出某些节点所代表的对象类型,但是要检查值或值的存在,则需要在程序中包含这些对象(我已经使用Python和ruamel.yaml包¹,但其他语言和解析器应该也能正常工作。)
此外,您需要手动添加标签。如果您可以自动执行此标记分配,则通过读取映射/序列树并使用您不需要标记的某种算法替换节点,您可以只运行这些分配,然后让对象检查您为其类指定的规则。在源代码中添加标签可能会混淆symfony2,在这种情况下,您必须先预先处理(手)标记的YAML,然后才能使用它(通常是安全加载和转储就足够了)。
使用XML可以选择更多的工具。但是你只需要一个工具,或者像上面指出的一个方法,它对你有用。如果我是你,我就不会放弃YAML的可读性。
¹虽然我的YAML往返程序包ruamel.yaml是开源的(它是PyYAML的增强版本),但遗憾的是我使用对象验证YAML的代码不是。
答案 1 :(得分:0)
为什么不使用这里解释的集成Symfony TreeBuilders:
https://symfony.com/doc/current/components/config/definition.html