是否有可能公开Symfony 2验证规则(对于给定实体)?我找不到类似的东西。我正在尝试使用DRY方法进行客户端验证(使用backbone.js)。类似捆绑包或任何提示的东西都会有所帮助。
Here is返回组件验证器。一种可能性是:
使用Symfony 2标准方式定义服务器端验证规则。示例(YAML,取自他们的网站):
# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\Author:
properties:
name:
- NotBlank: ~
使/author/rules
返回一个JSON对象,该对象将实体中的字段Map到一个“已编译”的正则表达式。我对此不是很确定,但我认为Symfony 2在内部将validation.yml
规则编译为正则表达式。
假设一个作者实体由name
字段和NotBlank
组成(注意我不是正则表达式中的主,这是从另一个问题中复制粘贴的):
{ 'name' : '^\s*\S' }
最后检索JSON对象,并使用backbone.jssystem进行客户端验证。可能进行缓存。例如(警告!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>
我是在要求月亮吗?
2条答案
按热度按时间mutmk8jj1#
你可以试试这个捆绑包。我过去用过它,并取得了不同的成功。
https://github.com/formapro/JsFormValidatorBundle
它导出所有的Symfony验证规则并转储到JS数据结构中。然后有各种帮助器允许您执行这些验证。还记得禁用
<form novalidate="novalidate">
等HTML5表单验证我认为它可能仅限于Symfony〈= 2.6,但我已经让它工作到Symfony 2.7.7。我认为维护人员目前正在支持Symfony 3.0。
此捆绑包仍在开发中:
kiz8lqtg2#
此套件可能符合您的需求APYJsFormValidationBundle
然而,它目前仅限于Assert应用于实体的已定义约束。
对php,yml和xml定义的约束的支持在todo列表中。