Domanda

Ho appena iniziato la programmazione Web e sono praticamente sorpreso che, sebbene io stia usando una libreria di validazione, ricevo ancora 20-30 righe di codice per la sola validazione, senza contare i messaggi di errore e le funzioni di callback. Sto usando il framework Kohana MVC e mi chiedevo se ci fosse un modo per abbreviare i miei codici di validazione. Ho provato a pensare al seguente

  1. inserendo i codici di validazione nel mio modello (cosa abbastanza per un noob come me).
  2. creare una libreria davvero piccola per validare le voci (qualcosa che si aggancia alla classe di validazione, permettendomi così di chiamare la biblioteca per procedure ripetitive come la registrazione dell'utente, la modifica e altro)

O ci sono modi migliori e più efficienti?

È stato utile?

Soluzione

Consiglio vivamente di lavorare sull'inclusione della convalida nel modello. Una volta che sei in grado di farlo, tutti gli altri che creerai saranno molto più facili. Inoltre, se hai più controller che tentano di salvare quei dati, non dovrai ricodificare la convalida. I documenti Kohana contengono alcuni esempi per l'integrazione della libreria di validazione e ORM, dovresti iniziare da lì.

Altri suggerimenti

Uso Zend_Validate con Zend_Forms per la validazione in cui il codice di validazione è nel metodo init init. Tutto quello che devo fare è passare un array di validatori per ogni elemento e poi eseguire ..

$form->isValid($data);

... all'esterno del modulo per convalidare i dati.

L'array di validazione è facilmente più di 30 righe perché separo ogni voce dell'array con una nuova riga. Ma immagino che lo avrai se si definiscono regole di convalida ben definite per ciascun elemento giusto.

Ed è davvero facile definire nuovi validatori in Zend.

modifica: ho scoperto un framework che estende Zend Framework che consente agli oggetti del dominio di contenere la propria convalida. Si chiama Xyster framework ma non sono riuscito a farlo funzionare al primo tentativo, quindi non ho provato dopo.

Ecco la mia strategia per gestire il codice di convalida. Suppongo che per "biblioteca di convalida" intendi quelli che si assicurano solo che un'e-mail sia un'e-mail, che i numeri di telefono siano numerici e che non siano di natura commerciale.

L'idea è di avere ogni codice di regola aziendale come un funzione - se si tratta di PHP, puoi ottenere semplicemente usando una stringa per definire la funzione; per altre lingue, potrebbe essere necessario utilizzare il modello di strategia. Definire un'interfaccia per il functor (non necessario per PHP) e scaricarla in un array.

Esegui l'array che restituirà esito positivo, errore e un codice di errore a un buffer. Alla fine, esaminare il buffer degli errori e determinare quale convalida non è riuscita. Usalo per personalizzare la vista.

Ecco un esempio

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

Alla fine, avrai un array di risultati, ognuno riempito con un processo di validazione, e sai quale ha fallito e quale no. Questo può quindi essere passato al lato client per ulteriori elaborazioni, come l'evidenziazione dei campi non riusciti. Error_code può essere utilizzato per cercare il messaggio di errore e la formattazione corretti applicati ad esso.

Non sono davvero sicuro di ciò che intendi per richiamate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top