Skocz do zawartości

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!
Zdjęcie

Jak zrobić własną procedurę walidacji w backendzie??


  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów
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
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Żeby wyświetlić błąd przy polu, w save_callback wyrzuć Exception:

throw new Exception('Nie ma już wolnych miejsc na to szkolenie!');

  • 0

Codefog - Contao web development


#3
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów

Ż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ę.
  • 0

#4
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów

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->status
to 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??
  • 0

#5
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
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;

  • 0

Codefog - Contao web development


#6
Jaro_27

Jaro_27

    Doświadczony

  • Zarejestrowani
  • PipPipPip
  • 60 postów

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.
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych użytkowników