2012-03-07 16 views
9

Czy możliwe jest ujawnienie Symfony2 reguł walidacji (dla danego Podmiotu)? Nie mogę znaleźć niczego takiego. Próbuję wykonać walidację po stronie klienta (używając backbone.js) z podejściem DRY. Pomoże mu coś takiego jak pakiet lub jakaś wskazówka.Udostępnianie reguł sprawdzania poprawności Symfony2 za pomocą backbone.js lub javascript?

Here is weryfikator komponentów. Jedna możliwość to:

Definiowanie reguł sprawdzania poprawności po stronie serwera przy użyciu standardowego sposobu Symfony2. Przykład (YAML, podjęte z ich strony internetowej):

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

Producent /author/rules zwrócić obiekt JSON, który mapuje pola z jednostki do „skompilowany” wyrażenia regularnego. Nie jestem tego pewien, ale myślę, że wewnętrznie Symfony2 kompiluje reguły validation.yml w wyrażenia regularne.

Zakładając podmiot autorski wykonany name polu NotBlank (zauważ, że nie jestem mistrzem w regex, to skopiuj i wklej z innej kwestii):

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

Wreszcie pobrać ten obiekt JSON i zrobić Sprawdzanie poprawności po stronie klienta za pomocą systemu backbone.js. Być może buforowanie. Na przykład (ostrzeżenie pseudo-kod podobny kod wewnątrz 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> 

Am I z prośbą o Księżycu?

+0

Może coś knujesz! Domyślam się, że nie ma sposobu, aby to zrobić teraz, ale może być sposób, aby przekształcić to w pakiet! Sugerowałbym nie używać ajax w tym przypadku, po prostu dlatego, że ładowanie reguł sprawdzania poprawności za każdym razem jest ogromnym obciążeniem. Ale co z eksportowaniem reguł z pliku yml do pliku javascript, który definiuje różne wyrażenie regularne, dzięki czemu można z nich korzystać za pomocą skryptu backbone.js (lub dowolnego kodu javascript, który chciałbyś)? – Sgoettschkes

+0

@Boo dzięki za komentarz. Niestety nie jestem tak dobry w Symfony2, aby pakiet był dobrze znany.I myślę, że eksportowanie reguł z yaml do javascript (a następnie pisanie reguł javascript - znowu) jest przesadzone - powinien istnieć jakiś sposób na uzyskanie "skompilowanych" reguł bezpośrednio z Symfony2. – gremo

+0

Cóż, jeśli zamierzasz używać ajax, możesz również po prostu sprawdzić poprawność obiektu w symfony i zwrócić wynik sprawdzania poprawności za pomocą wiadomości zwrotnej ajax. Jeśli więc chcesz sprawdzić nazwę autora, wysyłasz żądanie do/author/validate z nazwą użytkownika, kontroler sprawdza poprawność za pomocą sprawdzania poprawności symfony i zwraca, jeśli sprawdzanie poprawności powiodło się. W zależności od tego wyświetlane są komunikaty o błędach. – Sgoettschkes

Odpowiedz

0

Ten pakiet może własnych potrzeb APYJsFormValidationBundle

jednak jest obecnie ograniczony do dochodzenia określonych ograniczeń, zastosowany do jednostek.

Obsługa ograniczeń zdefiniowanych w php, yml i xml znajduje się na liście zadań.

0

Możesz wypróbować ten pakiet. Używałem go z różnym sukcesem w przeszłości.

https://github.com/formapro/JsFormValidatorBundle

Eksportuje wszystkie zasady walidacji Symfony a następnie zrzuca się do struktury danych JS. Następnie są różne pomocników, aby umożliwić egzekwowanie tych walidacji. Pamiętaj też o wyłączeniu sprawdzania poprawności formularza HTML5 z <form novalidate="novalidate"> itd.

Myślę, że może być ograniczony do Symfony < = 2.6, ale mam to działa do Symfony 2.7.7. Opiekunowie aktualnie pracują nad obsługą Symfony 3.0.

Powiązane problemy