![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Witam, zaczynam z OOP i napisałem prostą klasę walidującą dla małych formularzy, napiszcie co można poprawić, miałem ją zaopatrzyć w MVC i prezentować błędy widokiem ale to już na kiedy indziej.
Ten post edytował MateuszS 21.04.2010, 17:23:14 -------------------- O! Zimniok :P
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego ten kod się do niczego nie nadaje?
1) Powiedzmy, że mamy pole "treść" w dwóch formularzach: edycji sygnaturki oraz tworzenia nowego wpisu do np. bloga. Chcę by pole "treść" w sygnaturce miało pomiędzy 10, a 255 znaków oraz by nie można było podać w nim żadnego adresu URL. Natomiast "treść" w formularzu nowego wpisu ma mieć długość co najmniej 50 znaków. W tym momencie to "narzędzie" poległo (czyt.: to w jaki sposób co sprawdzać nie powinno być zawarte w klasie). 2) Powiedzmy, że ponownie mam dwa pola "treść". Chcę by treść komunikatu w przypadku gdy podano za mało znaków w formularzu edycji sygnaturki była następująca: "ABC Sygnaturka musi mieć co najmniej 10 znaków", a w formularzu dodania nowego wpisu: "DEF +50 znaków proszę." Ponownie Twój kod się nie spisuje (czyt.: treści komunikatów również poza klasą lub możliwość ich dowolnej modyfikacji) 3) Chcę dodać sobie nowy walidator - np. sprawdzający czy nr NIP jest poprawny. Muszę przebudowywać pół klasy? (czyt.: walidatory powinny być osobnymi obiektami implementującymi jakiś interfejs) To tak na początek. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
To tak:
1. Miałem tragiczny błąd w metodzie, nie pozamieniałem z powrotem $this->zmienna na $zmienna, już to poprawiłem. 2. Dodałem metodę za pomocą której możesz bez przerabiania klasy dodawać nowe typy pól, np. ów nip. 3. Mógłbyś wytłumaczyć o co chodzi z Cytat walidatory powinny być osobnymi obiektami implementującymi jakiś interfejs
Ten post edytował MateuszS 21.04.2010, 18:36:42 -------------------- O! Zimniok :P
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
destruct masakryczny , echo w modelu ?
Dodatkowo lepiej by wyglądała całość gdybyś dał angielskie nazwy. rozbił bym walidację na metody np valid::mail('adf@dsaf.pl'); |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
Walidacja NIPu nie polega tylko na policzeniu jego długości. http://pl.wikipedia.org/wiki/NIP/Implementacja
Ten post edytował Wicepsik 21.04.2010, 17:43:07 -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Spawnm, tak wiem, to nie jest problem zamienić na ang, echo dałem bo jak napisałem, nie mam klasy widoku, więc na szybko wyświetlam błędy,
Wicepsik, gdybyś zobaczył kod, byś wiedział że można dodać do metody 4 parametr którym jest wyrażenie regularne. W każdym razie jeżeli wyrażenia nie wystarczą to dodam jeszcze metodę sprawdzającą nip. edit:: dodałem prostą metodę zwracania błędów. Ten post edytował MateuszS 21.04.2010, 18:37:01 -------------------- O! Zimniok :P
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat 3. Mógłbyś wytłumaczyć o co chodzi z Chodzi o to, że walidatory powinny być osobnymi obiektami wyspecjalizowanymi w walidacji konkretnego rodzaju. Daje to możliwość, bym utworzył sobie swój własny walidator, niewpisany na sztywno w kod Twojej klasy - innymi słowy: zwiększamy elastyczność narzędzia.Cytat walidatory powinny być osobnymi obiektami implementującymi jakiś interfejs Tutaj masz przykładowy kod, który ilustruje jak mogło by to wyglądać (oczywiście brak tutaj dziesiątek rzeczy (ustawienia czytelnej treści błędu, wielu walidatorów dla jednego elementu, przedefiniowanych opcji dla walidatorów i całej masy innych rzeczy)): Ale dlaczego to rozwiązanie jest o niebo lepsze? Chcę utworzyć nowy walidator... wystarczy mi obiekt dowolny, który implementuje interfejs \Crozin\Validation\Validatable; Chcę spersonalizować dany walidator? Podaję mu parametr. Itp. itd. PS. Całość pisana "z palca" bez zastanowienia (jedynie sprawdziłem czy w ogóle działa) - więc jest to na pewno kod do poprawki (przemyślenia sposobu działania, przerobienia), ale daje jako taki zarys pewnej elastyczności. Ten post edytował Crozin 21.04.2010, 22:03:19 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Niestety jest to dla mnie czarna magia co napisałeś, te interfejsy, klasy abstrakcyjne, nigdy nie mogłem załapać o co w nich chodzi, nie sądziłem że mi się prędko przydadzą.
Poza tym wywala błędy z tym namespace, nieoczekiwany string, no i czy ten system waliduje chociaż pod kątem tagów HTML w polach? Bo widzę setki dziwnych rzeczy ale nigdy bym nie zgadł że to ma coś wspólnego z walidacją. -------------------- O! Zimniok :P
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Poza tym wywala błędy z tym namespace Widocznie masz PHP w wersji poniżej 5.3 - ale przestrzenie nazw można stąd wywalić na dobrą sprawę.Cytat no i czy ten system waliduje chociaż pod kątem tagów HTML w polach Nie, dlaczego miałby to robić? A jeżeli jest Ci takie coś potrzebne wystarczy zrobić sobie walidator, który będzie sprawdzać coś takiego.Cytat Niestety jest to dla mnie czarna magia co napisałeś, te interfejsy, klasy abstrakcyjne, nigdy nie mogłem załapać o co w nich chodzi, nie sądziłem że mi się prędko przydadzą. W takim razie radzę sobie na chwilę obecną darować jakiekolwiek pisanie i skupić się wyłącznie na teorii i możliwościach języka (swoją drogą bardzo ograniczonych pod względem OOP).
Ten post edytował Crozin 21.04.2010, 20:18:39 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Cytat Widocznie masz PHP w wersji poniżej 5.3 - ale przestrzenie nazw można stąd wywalić na dobrą sprawę. No mam PHP 5.2.6. Cytat Nie, dlaczego miałby to robić? A jeżeli jest Ci takie coś potrzebne wystarczy zrobić sobie walidator, który będzie sprawdzać coś takiego. No ja przecież napisałem skrypt który ma za zadanie walidować dane z formularza, myślałem że twój też to robi ![]() Cytat W takim razie radzę sobie na chwilę obecną darować jakiekolwiek pisanie i skupić się wyłącznie na teorii i możliwościach języka (swoją drogą bardzo ograniczonych pod względem OOP). Nie no wiesz, logiczne że najpierw teoria, ale w mojej książce są zaledwie 2 strony o interfejsach i brak jakichkolwiek przykładów praktycznego zastosowania, stąd mój brak wiedzy na ten temat... a podobno najlepsza jest praktyka. Wiele osób radzi żebym zajął się jakimś frameworkiem, ale co mi po frameworku jak wg was nie umiem napisać najprostrzej rzeczy w OOP -------------------- O! Zimniok :P
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat No ja przecież napisałem skrypt który ma za zadanie walidować dane z formularza, myślałem że twój też to robi Jeżeli mu rozkażesz to i to będzie Ci robić tylko dlaczego miałby z automatu blokować elementy HTMLa w tych polach? Że niby nie mogę w treści wątku wpisać <p> to akapit w HTMLu? Takimi rzeczami jak wyświetlanie wprowadzonych przez użytkowników danych (by uniemożliwić wstawienie własnego kodu HTML itp.) też trzeba się zająć - ale to nie jest robota dla walidatora.Cytat Nie no wiesz, logiczne że najpierw teoria, ale w mojej książce są zaledwie 2 strony o interfejsach No na dobrą sprawę to o interfejsach nie ma się co wiele rozpisywać. Nie jest to jakaś skomplikowana część języka.Cytat i brak jakichkolwiek przykładów praktycznego zastosowania No to to co Ci podałem możesz potraktować jako konkretny przykład zastosowania interfejsów - metoda \Crozin\Validation\Validator::addValidator() wymaga by drugi parametr był obiektem implementującym interfejs \Crozin\Validation\Validatable. Wymaga tego ponieważ później wykonywane są operacje na tych walidatorach (a dokładnie to wywoływanie metody isValid()). Dzięki temu mamy pewność, że to co przekazujemy jako walidator jest ów walidatorem, albo przynajmniej potrafi się zachowywać jak takowy.Cytat Wiele osób radzi żebym zajął się jakimś frameworkiem, ale co mi po frameworku jak wg was nie umiem napisać najprostrzej rzeczy w OOP Również uważam, że branie się za FW w momencie gdy nie zna się nawet elementów języka jest głupotą.
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Cytat Również uważam, że branie się za FW w momencie gdy nie zna się nawet elementów języka jest głupotą. No nie przesadzajmy, podstawy pewne mam -------------------- O! Zimniok :P
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat No nie przesadzajmy, podstawy pewne mam Tego negować nie będę, ale jeżeli nie znasz elementów języka (interfejsy, klasy abstrakcyjne, przestrzenie nazw, Type Hinting (nie wiem jaka można by to po polsku nazwać) itp) nie wspominając o podstawowych paradygmatach obiektówki (abstrakcja bytów, polimorfizm, hermetyzacja itp.) to ciężko jest mówić o tym, że ma się opanowane podstawowe założenia programowania obiektowego.Zacznij od manuala - przebrnij przez paskudnych kilkanaście stron teorii - potem polecałbym poczytać nieco artykułów dotyczących OOP (nie koniecznie nastawionego na PHP, gdyż te idee są wspólne dla wszystkich języków obiektowych). Czasami dobrze też zacząć pisanie od końca czyli od interfejsu (chodzi tutaj o to w jaki sposób będziesz danego narzędzia używać (czyli to co jest w liniach 192 - 199 mojego kodu)). Tworzysz sobie jak najbardziej skomplikowane przykłady użycia danego narzędzia, a dopiero potem bierzesz się za implementację. |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 441 Pomógł: 71 Dołączył: 3.09.2007 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
@Crozin mógłbyś rzucić kilka linków do artykułów które dotyczą OOP ? Chodzi mi o artykuły które są sprawdzone i dobre według Ciebie.
-------------------- |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat @Crozin mógłbyś rzucić kilka linków do artykułów które dotyczą OOP ? Chodzi mi o artykuły które są sprawdzone i dobre według Ciebie. Nie ma zlych artykulow sa tylko dobre i bardzo dobre :] Zamiast czytania art'ow polecam manual zeby zapoznac sie z kontrukcjami OOP w PHP 5-6. Potem sciagnac jakis gotowy Fw/klasy przeanalizowac je i probowac pisac samemu od jakis prostych systemow. Dawac kod na forum i pytac co mozna lepiej napisac. Kursy zabardzo nie pomagaja przyklady ktore zawieraja sa troche kulawe jak i te zawarte w ksiazkach jednak do teorii sa OK. P.S @MateuszS zajzyj tutaj: Temat: klasaphp Validation masz tam az 3 klasy do tego Ten post edytował marcio 22.04.2010, 13:52:54 -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
Crozin, to że nie użyłem w mojej klasie np. dziedziczenia to nie znaczy że nie wiem jak to używać
![]() marcio, potiwerdzam, kursy nie mają dobrych przykładów, w książki też trochę zainwestowałem ale chyba nie bardzo się opłacało. Manual może i jest dobry, ale trzeba znać perfekcyjnie angielski ja puki co jeszcze się kształcę w tym kierunku. -------------------- O! Zimniok :P
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Crozin, to że nie użyłem w mojej klasie np. dziedziczenia to nie znaczy że nie wiem jak to używać Wszystkie te moje wywody opieram na:Cytat Niestety jest to dla mnie czarna magia co napisałeś, te interfejsy, klasy abstrakcyjne, nigdy nie mogłem załapać o co w nich chodzi, nie sądziłem że mi się prędko przydadzą. Cytat Manual może i jest dobry, ale trzeba znać perfekcyjnie angielski ja puki co jeszcze się kształcę w tym kierunku. A bzdura...! Wcale nie musisz znać dobrze tego angielskiego. Fakt - pewnie co jakiś czas trafi Ci się słówko, którego nie znasz, ale jeżeli jako tako potrafisz czytać w tym języku to nie widzę powodów, dla których nie miałbyś właśnie z tego źródła korzystać.
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
No a jak wy się OOP uczyliście? Też mieliście takie problemy? ;/ Może ponaśladuję
![]() -------------------- O! Zimniok :P
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
No a jak wy się OOP uczyliście? Też mieliście takie problemy? ;/ Może ponaśladuję ![]() Ja czytalem kursy,ksiazki i zadawalem glupie pytania i brali mnie za debila i tlumaczyli jak debilowi az wkoncu posciagalem pare fw, roznych klas poprobowalem sam cos pokodzic az weszlo mi w krew oop. -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 1 429 Pomógł: 195 Dołączył: 6.10.2008 Skąd: Kraków/Tomaszów Lubelski Ostrzeżenie: (0%) ![]() ![]() |
He czyli głupie pytania kluczem do sukcesu
![]() Jaka jest praktyczna różnica pomiędzy dziedziczeniem a wywołaniem obiektu klasy w klasie, przykład:
a
Ten post edytował MateuszS 22.04.2010, 20:59:13 -------------------- O! Zimniok :P
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 19:10 |