一般来说,是否与backbone.js或javascript共享Symfony2验证规则?

zed5wv10  于 2022-11-10  发布在  Java
关注(0)|答案(2)|浏览(94)

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

我是在要求月亮吗?

mutmk8jj

mutmk8jj1#

你可以试试这个捆绑包。我过去用过它,并取得了不同的成功。
https://github.com/formapro/JsFormValidatorBundle
它导出所有的Symfony验证规则并转储到JS数据结构中。然后有各种帮助器允许您执行这些验证。还记得禁用<form novalidate="novalidate">等HTML5表单验证
我认为它可能仅限于Symfony〈= 2.6,但我已经让它工作到Symfony 2.7.7。我认为维护人员目前正在支持Symfony 3.0。
此捆绑包仍在开发中:

  • 版本1.2支持Symfony〈= 2.6
  • Symfony为1.3,2.7 - 2.8
  • 3.0版为1.4
  • 3.1版为1.5
  • 1.6 for 4(尽管这是当前的预发布版本)
kiz8lqtg

kiz8lqtg2#

此套件可能符合您的需求APYJsFormValidationBundle
然而,它目前仅限于Assert应用于实体的已定义约束。
对php,yml和xml定义的约束的支持在todo列表中。

相关问题