2012-03-07 10 views
9

Symfony2 doğrulama kurallarını (belirli bir Varlık için) göstermek mümkün olabilir mi? Böyle bir şey bulamıyorum. Ben istemci tarafı doğrulama (backbone.js kullanarak) bir DRY yaklaşımı ile yapmaya çalışıyorum. Bir paket ya da herhangi bir bahşiş gibi bir şey yardımcı olacaktır. Bileşen validatoruSymfony2 doğrulama kurallarını genel olarak backbone.js veya javascript ile paylaşma?

Here is. Bir olasılık:

Symfony2 standart yolunu kullanarak sunucu tarafı doğrulamasını kurallarını tanımlayın. Örnek (kendi web sitesinden alınan YAML,):

# src/Acme/BlogBundle/Resources/config/validation.yml 
Acme\BlogBundle\Entity\Author: 
    properties: 
     name: 
      - NotBlank: ~ 

Yap bir "derlenmiş" düzenli ifade işletmeden alanları eşleştiren bir JSON nesnesi döndürür /author/rules. Bu konuda emin değilim ama Symfony2'nin dahili olarak validation.yml kurallarını düzenli ifadelere dönüştürdüğünü düşünüyorum.

{ 'name' : '^\s*\S' } 

Nihayet o JSON nesnesi almak ve yapmak (i ​​regex bir usta değilim dikkat, bu başka bir soru yapıştırma bir kopyasıdır ve) NotBlank ile name alanda yapılmış bir yazar varlık varsayarsak

Backbone.js sistemiyle istemci tarafında doğrulama. 'u önbelleğe almayı unutmayın. Örneğin (uyarı validate() içindeki sözde kod benzeri kod!):

<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> 

i aya soran muyum?

+0

Belki bir şeye sahipsiniz! Sanırım şu an bunu yapmanın bir yolu yok, ama bunu bir paket haline getirmenin bir yolu olabilir! Bu durumda ajax'i kullanmamayı tavsiye ederim, basitçe validasyon kurallarının yüklenmesi her zaman büyük bir yük. Ancak, kuralların yml'den farklı regex'i tanımlayan bir javascript dosyasına aktarılmasıyla ilgili olarak, bunları backbone.js ile (ya da istediğiniz herhangi bir javascript koduyla) kullanabilirsiniz? – Sgoettschkes

+0

@Boo Yorumlarınız için teşekkürler. Ne yazık ki Symfony2'de pek iyi değil, doğru bir demet yapmasını biliyorum.Ve bence yaml'den javascript'e (ve daha sonra javascript kurallarını yazıyor) kuralların dışa aktarılmasının çok fazla olduğunu düşünüyorum - Symfony2'den doğrudan "derlenmiş" kurallar almanın bir yolu olmalı. – gremo

+0

Peki, eğer ajax'ı kullanacaksanız, nesneyi yalnızca sembole içinde doğrulayabilir ve doğrulama sonucunu ajax geri dönüş mesajı ile döndürebilirsiniz. Bu nedenle, Yazar ismini doğrulamak istiyorsanız, kullanıcı adını içeren/yazar/doğrula'ya bir istek gönderirsiniz, denetleyici, symfony doğrulama kullanarak doğrular ve doğrulama başarılı olursa olsun döndürür. Buna bağlı olarak hata mesajlarını gösterirsiniz. – Sgoettschkes

cevap

0

Bu paket ihtiyaçlarınızı şu anda kuruluşlara uygulanan tanımlanmış kısıtlamalar, iddia sınırlıdır Ancak

APYJsFormValidationBundle uygun olabilir.

Yapılacaklar listesinde php, yml ve xml tanımlı kısıtlama desteği bulunur.

0

Bu paketi deneyebilirsiniz. Geçmişte çeşitli başarılarla kullandım.

https://github.com/formapro/JsFormValidatorBundle

Bu Symfony'nin doğrulama kuralları tüm ihracat ve JS veri yapısı daha sonra döker. Daha sonra bu doğrulamaları uygulamak için çeşitli yardımcılar vardır. Ayrıca ben Symfony < = 2.6 ile sınırlı olabilir düşünüyorum <form novalidate="novalidate"> vb

HTML5 form doğrulama devre dışı bırakmak için hatırlamak ama Symfony 2.7.7 kadar çalışma var ettik. Bakıcılar şu anda Symfony 3.0 desteği üzerinde çalışıyorlar.

İlgili konular