Witam,
Jak można zrobić własną procedurę walidacji? Szukałem w necie, ale nie mogę znaleźć sensownego przykładu.
Mam pole typu select z terminami szkoleń i chcę po wybraniu szkolenia sprawdzać czy są wolne miejsca na to szkolenie. Jeżeli tak to następuje zapisa jeżeli nie to chciałbym wyświetlić na czerowno komunikat i nie następuje zapis. Jak dodać taki własny komunikat?? Tak jak np. nie wpiszemy nic w pole, które nie może być puste (mandatory=>true)? Domyślam się, żę trzeb użyć save_callback, ale jak powinna wyglądać ta funkcja??
Pozdrawiam,
Jarek
Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!

Jak zrobić własną procedurę walidacji w backendzie??
Rozpoczęte przez Jaro_27, Aug 27 2012 18:18
#1
Napisany 27 August 2012 - 18:18

#3
Napisany 27 August 2012 - 22:21

Żeby wyświetlić błąd przy polu, w save_callback wyrzuć Exception:
throw new Exception('Nie ma już wolnych miejsc na to szkolenie!');
Dzięki Kamil. To mi rozwiązało sprawę.
#4
Napisany 27 August 2012 - 22:54

Dzięki Kamil. To mi rozwiązało sprawę.
Kamil mam jeszcze taki jeden mały problem. W formularzu zapisu na szkolenie, gdzie korzystam z save_callback mam takie pole status. I teraz jak wyświetlam w funkcji save_callback
$dc->activeRecord->statusto on mi nie uwzględnia zmienionego statusu. Zapisuje go w bazie, ale w funkcji ma wartość poprzednią. Tak się dzieje ze wszystkimi polami formularza. W funkcji save_callback robię
print_r($dc->activeRecord)i po naciśnięciu Zapisz wyświetlają się dane takie jakie były po wejściu w edycję formularza. Zapis następuje w bazie, ale w $dc mam stare dane. Potrzebuję aktualnego zaznaczonego statusu w formularzu radio buttona status. W czym może tkwić błąd??
#6
Napisany 28 August 2012 - 08:01

Hm, to dziwne. W takim razie spróbuj te dane wyciągnąć bezpośrednio z bazy:
$objRecord = $this->Database->prepare("SELECT * FROM tl_tabela WHERE id=?")->limit(1)->execute($dc->id); echo $objRecord->status;
Już doszedłem dlaczego tak jest. Dzieje się tak, gdy pole, z którego chcemy odczytać aktualną wartość $dc->activeRecord->status w funkcji save_callback przypisanej do listy jest za nią. W
'palettes' => array(titleSelect,status),jak zmieniłem kolejność na
'palettes' => array(status,titleSelect),to wówczas mam aktualną wartość statusu w funkcji save_callback (pole titleSelect) i mogę go użyć do sprawdzania warunku walidacji w tej funkcji.
1 użytkowników czyta ten temat
0 użytkowników, 1 gości, 0 anonimowych użytkowników