2012-04-16 17 views
13

Jesteśmy w trakcie pisania nowego formularza, który nasz koder front-end zawiera wiele walidacji JavaScriptu (technicznie, jQuery Tools validation).Zalecenia dotyczące udostępniania reguł sprawdzania poprawności między JavaScript i PHP?

Piszę część procesu po stronie serwera PHP i oczywiście mój własny kod będzie wykonywał własne sprawdzanie poprawności otrzymanych danych.

Zamiast utrzymywać dwa zestawy reguł sprawdzania poprawności - jQuery i PHP - czy masz jakieś zalecenia dotyczące sposobu utworzenia centralnej listy reguł sprawdzania poprawności - tj. Pole X musi mieć rozmiar> 1 i < 10 itp. - czy mógłbym zmienić regułę sprawdzania poprawności w jednym pliku lub tabeli bazy danych, która następnie byłaby przekazywana zarówno do PHP, jak i do jQuery?

Na przykład, zmień tę samą zasadę, o której wspomniałem powyżej "pole X musi być rozmiaru> 1 i < 10" do "pole X musi być rozmiaru> 3 i < 5" i wszystko, co musiałbym zrobić, to edytować plik lub tabela bazy danych i zarówno PHP, jak i jQuery będą pobierać i analizować te dane odpowiednio?

Z góry dzięki za pomoc,

Phil

+0

Jaki rodzaj witryny został utworzony, dlaczego uważasz, że potrzebujesz tak zaawansowanego sprawdzania poprawności, że naprawdę nie możesz podzielić się regułami za pomocą pliku lub bazy danych, ponieważ jquery nie może odczytać danych z bazy danych, możesz użyć ajaxa, ale ja naprawdę robię nie widzę sensu, dlaczego miałbyś to zrobić Inną myślą, którą mogę polecić jest użycie xml do przechowywania reguł sprawdzania poprawności –

+0

To jest kolejny obszar, w którym NodeJS naprawdę świeci. – AlienWebguy

+0

Streszczenie prostych reguł sprawdzania poprawności (wiadomości e-mail, maksymalna długość, wymagane itp.) Z bazą danych zawierającą reguły jest dość proste, ale zaawansowane sprawdzanie poprawności, takie jak zmiana logiki sprawdzania poprawności na podstawie zawartości innego pola, bieżącego użytkownika lub na podstawie inne obiekty w systemie są dość skomplikowane. Jeśli nie masz dużej ilości logiki sprawdzania poprawności, po prostu ręcznie zakodowałbym logikę w PHP i jQuery. –

Odpowiedz

4

Coś wzdłuż tych linii będzie prawdopodobnie dobre: ​​

<?php 
$validation = Array(
    "field1" => Array(// "field1" is the name of the input field 
     "required" => true, // or false 
     "minlength" => 5, // use 0 for no minimum 
     "maxlength" => 10, // use 9999 (or other high number) for no maximum 
     "regex" => "^[a-zA-Z0-9]+$" // use empty string for no regex 
    ), 
    "field2" => ....... 
    .... 
); 
if($_POST) { 
    foreach($validation as $k=>$v) { 
     if(!isset($_POST[$k])) { 
      if($v['required']) die("Field ".$k." is required"); 
     } 
     else { 
      $l = strlen($_POST[$k]); 
      if($l < $v['minlength']) die("Field ".$k." too short"); 
      if($l > $v['maxlength']) die("Field ".$k." too long"); 
      if(!preg_match("(".$v['regex'].")",$_POST[$k])) die("Field ".$k." incorrect format"); 
     } 
    } 
    // all ok! 
} 
?> 
<script type="text/javascript"> 
    (function(rules) { 
     var die = function(str) {alert(str); return false;}; 
     document.getElementById('myForm').onsubmit = function() { 
      var elms = this.elements, i, it, r, s; 
      for(i in rules) { 
       r = rules[i]; 
       it = elms.namedItem(i); 
       if(typeof it == "undefined") { 
        if(r.required) return die("Field "+i+" is required"); 
       } 
       else { 
        s = it.length; 
        if(s < r.minlength) return die("Field "+i+" too short"); 
        if(s > r.maxlength) return die("Field "+i+" too short"); 
        if(!s.match(new RegExp(r.regex))) return die("Field "+i+" incorrect format"); 
       } 
      } 
      return true; 
     }; 
    })(<?=json_encode($validation)?>); 
</script> 

Jak widać, ogólna idea jest zdefiniowanie zestawu zasady, to magia dzieje się w json_encode($validation) - przekazuje to reguły do ​​środowiska JavaScript. Nadal musisz zduplikować kod weryfikacyjny, aby działał on w PHP i JS, ale przynajmniej teraz możesz dodać więcej reguł bez konieczności zmiany kodu w dwóch miejscach. Mam nadzieję że to pomoże!

+0

Dziękuję, podoba mi się to - zamierzam to wypróbować :) – PhilGA

3

Nette framework robi to: http://doc.nette.org/en/forms

Cała forma i zasady zatwierdzania są zdefiniowane w pliku PHP. Framework następnie generuje kod HTML z walidacją javascript, a po jego przesłaniu dokonuje walidacji po stronie serwera.

Można nawet korzystać z części Forms osobno.

+0

Witam @ondrata, Nette wygląda podobnie do Zend, którego używamy na zapleczu. Ale unikamy używania formularza Zend, ponieważ jest to uciążliwe dla układu i mamy bardzo skomplikowany układ. – PhilGA

+0

@PhilAG: Nette jest nieco bardziej lekki niż Zend, więc prawdopodobnie pewne narzędzie do dopasowania (piszę prawdopodobnie, sprawdzam mądrze, staczanie własne może być opcją, ale odpowiednie narzędzie jest lepsze niż rolowanie własnych). – hakre

+1

@PhilAG To może ci pomóc w układzie: http://doc.nette.org/en/forms#toc-manual-rendering Zasadniczo, piszesz HTML wokół kontrolek, a Nette generuje tylko (i) . –

Powiązane problemy