Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nazwa dla klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
bigZbig
Napisalem sobie taka klase, ktora jest kontenerem dla tablic superglobalnych $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER. Zapewnia obiektowy sposób dostepu do zmiennych oraz umozliwia wstepna filtracje danych pod katem bezpieczenstwa. (Zastanawiam sie jeszcze czy zczytywac dane z tablic poprzez referencje, czy moze lepiej przekopiowac dane do obiektu po czym zwyczajnie wyczyścic predefiniowane tablice.)
Obiekt bedacy instancja tej klasy posiada tez metode redirect, ktora umozliwia przekierowanie oraz zachowanie kopi samego siebie. Tak wiec po przekierowaniu we wlasciwosci oRedirectedObiekt bierzacego obiektu bedzie znajdowala sie instancja tego obiektu z przed przekierowania.

Jaka nadac nazwe mojej klasie aby oddawala jej funkcjonalnosc.
dr_bonzo
We frameworkach zazwyczaj nazywa sie to Request (tzn. Req. sie m.in. tym zajmuje)
w akcji:
$this->getRequest()->getParameter( 'id' );


a w ZendFramework masz wlasnie walidacje/filtracje/wyciaganie (chyba tez w requescie) danych z get/post/itd.
bigZbig
W Zend Farameworku nie ma czegos takiego. Mozna przeprowadzic filtrowanie danych dzieki Zend_InputFilter, ale to sa tylko proste testy.

-- edit --
Mowiac proste mam na mysli to, ze nie ma innej funkcjonalnosci poza filtrowaniem danych
dr_bonzo
No to InputFilter.
Cytat
W Zend Farameworku nie ma czegos takiego. Mozna przeprowadzic filtrowanie danych dzieki Zend_InputFilter, ale to sa tylko proste testy.

A czego ty potrzebujesz?:
masz tam (jak pamietam) sprawdzenie czy parametr jest liczba (strngiem), wyciagniecie parametru jako liczby (stringa,...), sprawdzenie regexem

Co do referecji/usuweania tablic -- lepiej usunac, bo nie popsujesz sobie tych tablic innym skryptem, a i inne skrypty (korzystajace bezposrednio z $_*) nie beda dzialaly gdy wyczyscisz te tablice.
A o co tym redirekcie chodzi?
NuLL
Co do nazwy - moze wtedy inputAccessor questionmark.gif smile.gif
bigZbig
A propo's redirecta - np. odbierasz dane z formularza. Sa niepoprawne. Przekierowujesz na strone generujaca formularz. Teraz obiekt nazwijmy to redirecta zawiera kopie samego siebie z przed przekierowania (bledne dane). pobierasz te kopie, wyciagasz z niej bledne dane i odpowiednio wyswietlasz komunikaty co jest nie tak.
Ludvik
A nie lepiej po prostu HttpRequest? Tylko, że te przekierowania psują tutaj sprawę, bo to raczej należy do odpowiedzi, a nie żądania. Może rozdziel to po prostu na dwa obiekty - Request i Response i połącz jakoś logicznie.
Vengeance
"W Zend Farameworku nie ma czegos takiego. Mozna przeprowadzic filtrowanie danych dzieki Zend_InputFilter, ale to sa tylko proste testy."

Dlatego pewnie są dwie klasy. Wszak Request i Validation to nie to samo.
Może też warto Tobie tak zrobić... a raczej powinno się.

A redirect bardziej mi pasuje do klasy Response... tak samo jak ustawianie ciastek, wysyłanie nagłówków czy flashowanie bufora wyjściowego itp.
bigZbig
@Vengeance - w mojeje klasie nie ma tych wszystkich filtrow, ktore są np. w kalsie Zend_InputFilter. W moim rozwiązaniu planowałem umiaścić jedynie filtry bezpieczeństwa eskejpujace cudzyslowy lub sredniki albo zmieniające je na encje html. Typowe testy poprawnosci danych zamierzam przeprowadzać w innym miejscu.

Co do redirecta to może to faktycznie nienajlepsze miejsce.
piczu
tez mam taka klase w swoim framie o nazwie Input. Tak ladnie to wyglada z moja druga klasa Output smile.gif.
Cytat("bigZbig")
umozliwia wstepna filtracje danych pod katem bezpieczenstwa

ja stworzylem funkcje na wzor input_get w razie jej braku na serwerze.
Cytat("bigZbig")
Zastanawiam sie jeszcze czy zczytywac dane z tablic poprzez referencje, czy moze lepiej przekopiowac dane do obiektu po czym zwyczajnie wyczyścic predefiniowane tablice.

dla bezpieczenstwa stosuje drugi sposob
bigZbig
@piczu - ja sie sklaniam bardziej ku referencji bo wtedy moge przefiltrowac wartosci zmiennych a jednoczesnie uzyc skryptow zewnetrznych korzystajacych z tablic superglobalnych. Z drugiej strony w swoich klasach moge się do wartosci tych zmiennych odwolywac w sposob obiektowy.
Sh4dow
Nie no, temat jak nazwac klase. Sadze ze to dosc powazny problem. No chyba ze nie tworzysz dokumentacji, to sie zgodze moze byc problematyczna. Ale sadze ze dokumentacja moze wiele rzeczy rozwiazac.
Cysiaczek
Sh4Dow - możesz powiedzieć jasniej. Ja znam tylko zasady tworzenia nazw klas w PEAR i "mój sposób".
bigZbig - po prostu RequestResolver, request_Resolver etc. Jesli chcesz jakąś inną - bardziej egzotyczną nazwę, to proponuję RequestReBuilder - no w kjażdym razie coś w ten deseń. Bo jak rozumiem podstawowym zadaniem tej klasy jest odwzorowywanie żądań HTTP do postaci czytelnej dla reszty aplikacji?
Sh4dow
Nazywasz klase tak zeby byla w miare jasna, InOut, Input, Output, Request ... to na szybko przyklady, a jak bardzo chcesz mozesz nazwac przeciez GlobalVarsWarpper a nawet GlobalVarsWarpperWithFiltring. Co źle ? Mnie sie podoba guitar.gif
bigZbig
Podstawowe zadanie to zbieranie wszystkiego z tablic superglobalnych, proste filtrowanie pod wzgledem bezpieczenstwa i udostepnianie w postaci obiektowej.

@Sh4dow - podziwim Twoją kreatywność w wymyślaniu nazw ale z tym "GlobalVarsWarpperWithFiltring" to już Cię troszkę poniosło. Lubię nazwy krótkie - takie, które mogę objąć jednym spojrzeniem winksmiley.jpg
Sh4dow
Wiem ze mnie poniosło, zrobiłem to celowo. Chciałem pokazać ze nic nas nie ogranicza w nazwenictwie klas. Ja taka klase jak ty masz nazwalem jako Input, w starym systemie to bylo to InOut.
Poprostu topic na temat nazw klas nie powinien sie pojawic. Kazdy ma jakas technike nazewnictwa. Ja czasami uzywal wlasnie nazw typu GlobalVarsWarpper, tylko ze ta klasa bedzie nalezala do grupy klas Warpper ktore beda mialy jakies okreslone zadania. Klasy z koncowka Model to oczywiscie modele. mi to pomaga w skonfigurowaniu funckji __autoload(); co powoduje brak zamartwianie sie o includy. Wiec jaka masz technike tak nazwij. guitar.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.