Witamy na polskiej stronie wsparcia CodeIgniter. Nie zapomnij odwiedzić naszej strony głównej
Nie jesteś zalogowany na forum.
Strony: 1
Potrzebuję poprzez form_validation sprawdzić czy podana wartość istnieje w bazie
znalazłem coś takiego:
function username_exists($user)
{
$this->users_model->users_exists($user);
}
function user_exists($username)
{
$this->db->where('username',$username);
$query = $this->db->get('users');
if ($query->num_rows() > 0){
return true;
}
else{
return false;
}
}
i podpięcie tej metody z callbackiem pod regułę form_validation, ale potrzebowałbym czegoś bardziej zaawansowanego żeby nie pisać dla każdej tabeli i pola nowej metody , tzn czegoś w stylu is_unique, gdzie w argument mogę podać zarówno nazwę tabeli jak i nazwę pola. Jak to zrobić?
Ostatnio edytowany przez artpl (19-11-2016 08:09:37)
Offline
Powiedzmy że masz taką tablicę:
$rules = array(
array(
'field' => 'name1',
'label' => 'label1',
'rules' => 'required|callback__name1_check'
),
array(
'field' => 'name2',
'label' => 'label2',
'rules' => 'required|callback__name2_check'
),
);
Możesz przelecież po tej tablicy w taki sposób:
foreach ($rules AS $rule) {
if ($this->{strtolower($rule['label']) . '_check'}($fieldName, $tableName) === false) {
return 'Komunikat błędu gdy ' . $rule['label'] . 'jest w bazie';
}
}
I wtedy masz dynamiczne sprawdzanie każdego pola. Oczywiście możesz też sprawdzać czy dana metoda istnieje, a także zbierać komunikaty do tablicy i wyświetlić wszystkie.
Nie wiem czy to jedyny i najlepszy sposób, ale na pewno jeden z możliwych
P.S. zamieściłem pseudokod więc jeśli chcesz go użyć to sprawdź czy nie brakuje nawiasów itp.
Ostatnio edytowany przez maniakphp (20-11-2016 19:06:59)
Offline
Dodaj sobie do pliku libraries/Form_validation.php funkcje:
public function is_unique($str, $field)
{
sscanf($field, '%[^.].%[^.]', $table, $field);
return isset($this->CI->db)
? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
: FALSE;
}
a potem wywołujesz to tak:
unique[gdzie.co]
np:
unique[user.login]
$this->form_validation->set_rules('login','login','max_length[10]|unique[user.login]');
KOD zapożyczony z Bonfire
Ostatnio edytowany przez manieqq (25-11-2016 23:24:50)
Offline
W CI mamy regułę is_unique dla form validation.
Offline
tak zgadzam się jest is_unique ale ja potrzebuję żeby jeśli jest coś w bazie zwróciło prawdę
Offline
Strony: 1