2013-12-11 12 views
8

Voglio fare una regola di convalida personalizzata. Il mio modello si presenta così in questo momento:Laravel 4 regola di convalida personalizzata - dove estendere il validatore?

protected $rules = array(
    'first_name' => 'required', 
    'last_name' => 'required', 
    'ssn'   => 'required|integer|min:4|max:4', 
    'email'  => 'required|email', 
    'dob'   => 'required|checkAge', 
    'phone'  => 'required', 
    'street'  => 'required', 
    'postal_code' => 'required|integer|min:4', 
    'city'  => 'required' 
); 

Ma dove devo mettere la regola di convalida personalizzato? Ho letto che ho bisogno di estenderlo Validator. Per questo ho creato un semplice funzione

Validator::extend('foo', function($attribute, $value, $parameters) 
{ 
    return $value == 'foo'; 
}); 

E non so dove devo controllare?

Forse qualcuno può aiutarmi.

Grazie

+0

Dove dovremmo mettere in esso in laravel 5? – Yada

risposta

13

lo faccio con la creazione di una cartella di validazione in/app con tutti i file di validazione personalizzati in là .
Autoload questo modificando app/start/global.php.

ClassLoader::addDirectories(array(
    app_path() . '/commands', 
    app_path() . '/controllers', 
    app_path() . '/models', 
    app_path() . '/presenters', 
    app_path() . '/validation', 
    app_path() . '/database/seeds', 
)); 

Registro anche il resolver in questo file;

Validator::resolver(function($translator, $data, $rules, $messages) { 
     return new CoreValidator($translator, $data, $rules, $messages); 
    }); 

Una classe di convalida personalizzata di esempio (nella cartella di convalida);

<?php 

class CoreValidator extends Illuminate\Validation\Validator 
{ 

    protected $implicitRules = array('Required', 'RequiredWith', 'RequiredWithout', 'RequiredIf', 'Accepted', 'RequiredWithoutField'); 

    public function __construct(\Symfony\Component\Translation\TranslatorInterface $translator, $data, $rules, $messages = array()) 
    { 
     parent::__construct($translator, $data, $rules, $messages); 
     $this->isImplicit('fail'); 
    } 

    public function validatePostcode($attribute, $value, $parameters = null) 
    { 
     $regex = "/^((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))$/i"; 
     if (preg_match($regex, $value)) { 
      return true; 
     } 
     return false; 
    } 
} 

E aggiungere il messaggio di errore personalizzato alla matrice in in app/lang/it/validation.php

return array(
... 
"postcode" => "Invalid :attribute entered.", 
... 
) 
+0

Ho anche creato una cartella di convalida come quella in cui mi piace mettere tutte le mie cose di convalida. Mi piace separare la convalida dai miei modelli, perché questo sembra sciatto – Metropolis

8

Le estensioni possono essere aggiunti non appena gli stivali di applicazione. Quello che faccio è quello di creare un file validations.php allo stesso livello di routes.php e filters.php e quindi aggiungere questo al mio app/start/global.php:

require app_path().'/filters.php'; /// this one is already there... 
require app_path().'/validations.php'; 
Problemi correlati