是否有可能公开Symfony2验证规则(对于给定实体)?我找不到这样的东西。我正在尝试使用DRY方法进行客户端验证(使用backbone.js)。诸如捆绑包或任何小费之类的东西都会有所帮助。
Here is组件验证器。一种可能性是:
定义服务器端验证规则使用Symfony2标准方式。示例(YAML,取自其网站):
# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\Author:
properties:
name:
- NotBlank: ~
使/author/rules
返回JSON对象,该字段将实体中的字段映射到“已编译”正则表达式。我对此不太确定,但我认为Symfony2在内部将validation.yml
规则编译为正则表达式。
[假设作者实体由name
字段与NotBlank
组成(请注意,我不是regex的母版,这是另一个问题的副本并粘贴):
{ 'name' : '^\s*\S' }
最后检索该JSON对象,然后进行使用boundary.js进行客户端验证系统。 可能进行缓存。例如(警告!validate()
中类似伪代码的代码):
<script>
$(function () {
window.MyApp = window.MyApp || { Models : {}, Views : {}, Router : {} };
window.MyApp.Models.Author = Backbone.Models.extend({
initialize : function() { _.bindAll(this, 'validate') },
validator : $.get('/author/rules');
validate: function(attrs) {
// Loop each property of this model
_.each(attrs, function(field, value) {
// Get the regex from the validatior
var rule = this.validator[field];
var regex = new RegExp(rule);
if(!regex.test(value)) return "Model not valid.";
}
}
});
});
</script>
我要月亮吗?
您可以尝试此捆绑包。过去,我已经成功地使用了它。
https://github.com/formapro/JsFormValidatorBundle
它会导出所有Symfony验证规则,然后转储到JS数据结构中。然后有各种帮助程序可让您强制执行这些验证。还请记住使用<form novalidate="novalidate">
等禁用HTML5表单验证>
我认为它可能仅限于Symfony <= 2.6,但我可以在Symfony 2.7.7上使用。我认为维护者目前正在研究Symfony 3.0支持。