1) libraries/MY_controller.php
class Controller extends Controller_Core {
//reguly walidacji
public $form_rules = array();
//pola do walidacji
public $form_fields = array();
//bledy walidacji
public $form_errors = array();
//obiekt walidatora
public $form_post;
//dodanie nowego pola do walidacji i formularza
public function make_field($field, $rules = array(), $default = '')
{
$this->form_fields[$field] = $default; //przypisanie domyslnej wartosci
$this->form_errors[$field] = ''; //ustawienie pustej wiadomosci o bledzie
}
//jak wyzej tylko hurtowo
public function make_fields($fields = array())
{
if (!empty($fields) AND is_array($fields))
foreach ($fields as $field)
{
//ustalenie domyslnej pustej wartosci
$this->form_fields[$field] = '';
//ustawienie pustej wiadomosci o bledzie
$this->form_errors[$field] = '';
}
}
//przypisanie wartosci do pol
public function assign_values($fields = array())
{
if (!empty($fields) AND is_array($fields))
foreach ($fields as $field => $value)
{
$this->form_fields[$field] = $value; //ustalenie wartosci dla pola
}
}
//przepisanie wartosci i bledow po walidacji
public function set_fields($submit)
{
if (!empty($submit))
{
$this->form_fields = arr::overwrite($this->form_fields, $this->form_post->as_array());
$this->form_errors = arr::overwrite($this->form_errors, $this->form_post->errors());
}
}
//ustawienie regul walidacji
public function set_rules($all_rules)
{
if (!empty($all_rules) as is_array($all_rules))
{
foreach ($all_rules as $field => $rules)
{
foreach ($rules as $rule)
{
//przypisanie reguly do pola
$this->form_post->add_rules($field, $rule);
}
}
}
}
}
2)kontroler
$this->form_post = Validation::factory($this->input->post())->pre_filter('trim');
//stworz pola formularza (wartosc oraz ew. blad walidacji)
$this->make_fields(array_keys($crud_model->validation));
//przypisz reguly walidacji
$this->set_rules($crud_model->validation);
//opcjonalnie mozna przypisac domyslne wartosci
$this->assign_values(array('page_title'=>'tytuł'));
//waliduj
$this->form_post->validate();
//reszta jak w poprzednim przykladzie
3) model
public $validation = array(
'page_title' => array('required'),
'meta_title' => array('required'),
'meta_keywords' => array('required','length[4,7]'),
'meta_description' => array('required')
);
}
gotowe. plusy sa takie, ze pola deklarujemy tylko raz w modelu, nie ma potrzeby ponownego ich wpisywania. mozna dowolnie nimi manipulowac, dodawac nowe, kasowac juz dodane (jesli np. ktores pole nie jest w danym formularzu potrzebne). mozna dowolnie zmieniac reguly walidacji, nie jestesmy uwiazani z tymi, ktore sa w modelu.
generalnie to koncept, tak jak poprzedni przyklad nie jest super hiper extra rozwiazanie powalajace na kolana, zamieszczam w celach edukacyjnych, moze ktos posklada z tego swoja wizje obslugi formularzy i bedzie szczesliwy :) formularze i CRUD sa podstawa kazdej administracji strona, im latwiej (jest to kwestia indywidualna i wzgledna) bedzie sie nam z nimi pracowalo, tym wydajniejsi bedziemy :)

0 komentarze:
Prześlij komentarz