Dzisiaj parę słów o bibliotece Validation i nowym komponencie FORge (Form Generation - na razie w SVN, będzie wraz z 2.1). Może na początek coś na temat “zwykłej” walidacji danych. Jakiś czas temu na jednym z blogów przeczytałem o Kohanie: “głupie zwalidowanie formularza wg oficjalnej strony wymaga jakiejś niesamowitej ilości kodu”. W pierwszej chwili zgłupiałem (bo prościej już chyba być nie może), dopiero po chwili dotarło do mnie, że jeden z poradników (polskie tłumaczenie) robi niedźwiedzią przysługę temu frameworkowi ;) Autor coś tam nakombinował, namęczył się, zamieszał, a wszystko po to aby docelowo było łatwiej :) Nie jestem zwolennikiem takich rozwiązań więc daruje sobie moja ocenę tego, zamiast tego pokaże wam jak to można zrobić w najprostszy z możliwych sposobów.

Uwaga: kod jest za szeroki na tego bloga więc dla zwiększenia przejrzystości wstawiłem parę spacji tam gdzie nie powinno ich być ;)


//wczytujemy bibliotekę, wrzucamy do niej dane z $_POST
$this->load->library('validation', $_POST); 

//ustawiamy reguły walidacji danych
$this->validation->set_rules(array
(
 'login' => array('Login','=trim|required[3,30]|alpha_numeric|callback__isFreeLogin|xss_clean’),
 ‘pass’  => array(’Hasło’,'=trim|required[3,30]|xss_clean’),
 ‘pass2′ => array(’Powtórz hasło’,'=trim|required|matches[pass]‘),
 ‘email’ => array(’Email’,'=trim|required|valid_email|callback__isFreeEmail|xss_clean’),
 ‘email2′=> array(’Powtórz email’,'=trim|required|matches[email]‘)
));

if(!$this->validation->run())
{
    //błędy walidacji, oczywiście wyświetlamy je w widoku
    echo $this->validation->error_string;
}
else
{
    //wszystko gra, dokonujemy tego co chcieliśmy
}

Proste, prawda? Lecimy z wyjaśnieniem: reguły poprzedzone znakiem równości (=) to zwykłe funkcje z PHP, reszta to funkcje biblioteki Validation. callback__isFreeLogin to własna funkcja (w tym przykładzie sprawdza czy login/email jest już zajęty w bazie). A propos tych callbacków: mamy dwie możliwości, umieszczamy je w danym kontrolerze albo robimy sobie rozszerzenie (wg. odpowiednich reguł, odsyłam do manuala) biblioteki Validation. Wybór należy do was. Jak to mają być reguły często używane w różnych miejscach to na pewno warto rozszerzyć bibliotekę, a jak to jest tylko kwestia jednego callbacka to wiadomo, że szkoda zachodu ;)

Obsługa tego w widoku jest prosta:


<input type="text" name="login" value="<?=$this->validation->login;?>" />
<?=$this->validation->login_error; ?>

$this->validation->nazwainputa_error. (jak pracujecie na najwyższym stopniu raportowania o błędach to sugeruje użycie nieeleganckiej metody z @ do wyciszenia błędów pustych zmiennych).

I tyle, proste ;)

Czym jest FORge? To nowy moduł (2.1 SVN) łączący bibliotekę walidacji z generowaniem formularzy. Jego użycie jest bajecznie proste, spójrzcie na ten przykład, choć na tym elastycznym podejściu nieco ucierpiał widok.