使用Symbony2验证规则与一般的javascript进行脚本共享?

问题描述 投票:12回答:2

是否有可能公开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>

我要月亮吗?

javascript validation symfony backbone.js
2个回答
0
投票

此捆绑包可能满足您的需求APYJsFormValidationBundle

但是,目前仅限于断言已定义的约束,应用于实体。

对php,yml和xml定义的约束的支持在待办事项列表上。


0
投票

您可以尝试此捆绑包。过去,我已经成功地使用了它。

https://github.com/formapro/JsFormValidatorBundle

它会导出所有Symfony验证规则,然后转储到JS数据结构中。然后有各种帮助程序可让您强制执行这些验证。还请记住使用<form novalidate="novalidate">等禁用HTML5表单验证>

我认为它可能仅限于Symfony <= 2.6,但我可以在Symfony 2.7.7上使用。我认为维护者目前正在研究Symfony 3.0支持。

© www.soinside.com 2019 - 2024. All rights reserved.