![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
W kontrolerze definiuję sobie za pomocą $this->form_validation->set_rules, jakie mogą być dopuszczalne wartości pól w formatce, następnie wywołuję widok:
I fajnie - do widoku zostały przekazane dane. Chciałbym jednak, aby wprowadzenie błędnych danych skutkowało zmianą np. koloru wyświetlenia elementu "<input type=text>", z zachowaniem (wyświetleniem) danych wprowadzonych przez użytkownika. Wymyśliłem sobie więc, że w widoku wpakuję ciukę kodu, efekt:
Pytania: 1. Czy da się prościej? 2. kłuje w oczy użycie $_POST, ale taka konstrukcja działa, podczas gdy użycie if (isset ($this->input->post($key))) wyrzuca błąd: Fatal error: Can't use method return value in write context in [...] - o co kaman, przecież nic nie zapisuję, tylko testuję, czy "coś" istnieje... 3. Da się (to co chcę) zrobić inaczej, prościej, bardziej elegancko? P.S. CodeIgniter 2.1.0, więc całkiem nowy. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
1 + 3. Ja stosuję taki mechanizm (pseudokod):
2. Spróbuj samo:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Rada dotycząca pytania 2 pomogła, dzięki.
Natomiast jeśli chodzi o pytania 1 i 3, to mam lekkie wątpliwości: wygląda mi na to, że w CI walidacja wprowadzonych widoków wykonuje się w kontrolerze - wszak w kontrolerze tworzę callbacki do niestandardowej weryfikacji danych (http://codeigniter.com/user_guide/libraries/form_validation.html i poszukać po "Callbacks: Your own Validation Functions"). Widzę też, że Ty rozumujesz podobnie (jeśli dobrze czytam kod): robisz to w kontrolerze, w którym testujesz dane, ustawiasz parametry widoku, czy zapisujesz do bazy (przecież z widoku nikt nie zapisuje do bazy, prawda?) Natomiast ja swoje proste foreach dopisałem już w samym widoku - i tu mam lekki zgryz, bo z jednej strony jest to krótsze, poza tym sam mój kod odwołuje się (jak by na to nie patrzeć) do PREZENTACJI danych (dane zostały wprowadzone źle, więc wyświetlmy je użytkownikowi w WIZUALNY sposób używając odpowiedniej klasy CSS). Choć z drugiej strony operuję niejako na poprawności danych (choć ich nie sprawdzam, bo tę robotę odwala kontroler). No i pozostaje pytanie: co lepsze? A może ja nie rozumiem OOP (wszak dopiero zaczynam) ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Reguły walidacji możesz przypisywać w modelu, a w kontrolerze jedynie sterować "przepływem" danych w sposób, jaki opisałem. Nie musisz dawać żadnych foreachów ani w widoku, ani w kontrolerze.
W dokumentacji CI nie znalazłem prawdziwego kodu pasującego do mojego pseudokodu, ale spójrz na na ten z Kohany: http://kohanaframework.org/3.2/guide/kohan...rity/validation (sekcja "A Complete Example") PS: To, że w dokumentacji większość rzeczy pokazana jest w kontrolerach nie znaczy, że tak musi być. Zapewne chodziło o prostotę przekazu i maksymalnie uproszczenie przedstawianego kodu. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wytłumaczenie w prosty sposób.
Niestety, nie programuję zawodowo (i nie zamierzam - za stary jestem, by zmieniać zawód), więc chyba aktualnie nie poradzę sobie z przerobieniem mojego kodu na taki, który zakłada robienie wszystkiego w modelu. Pomimo tego, że czuję, że tak to powinno wyglądać. Odnośnie Kohany - być może spróbuję poznać tego frameworka, jednak to też jest sprawa "na potem". Bo na razie, skoro już wybrałem CI, to chciałbym skończyć to, co zacząłem - potem w ramach nauki Kohany mogę spróbować zmigrować swój kod z CI na Kohana. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 165 Pomógł: 20 Dołączył: 2.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zrób tak:
Plik: application/librares/MY_Form_validation.php
Następnie w controlerze wszystko tak jak miałeś do tej porty w form validatorze. W widoku jak tworzysz formularz to: Funkcja form_error('nazwa', TRUE) z drugim parametrem na TRUE zwraca nazwę klasy CSS zadeklarowaną w: $this->set_error_delimiters('class="error'', ''); Wtedy robisz sobie taki styl w CSS i masz podświetlone. form_error('nazwapola'); bez drugiego parametru zwróci Ci opis błędu dla danego pola. Ten post edytował szok 20.08.2012, 07:15:35 -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Trochę nie to, czego potrzebowałem, ale dzięki za naprowadzenie na trop (tropem jest stworzenie klasy pochodnej do CI_Form_validation i wrzucenie mojej logiki własnie tam). Ale tak to jest, jak się programista strukturalny bierze za obiektówkę i zapomina o paradygmatach pisania kodu obiektowego...
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.07.2025 - 20:30 |