![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 32 Dołączył: 14.04.2008 Skąd: Lenkowski.net Ostrzeżenie: (0%) ![]() ![]() |
Witam. Piszę swój autorski framework i zaprojektowałem dispatcher który za pomocą funkcji eval wykonuje akcje z kontrolera na takiej zasadzie, by w kontrolerze można było podać bezpośrednio zmienne.
Przykładowo http://example.com/kontroler/metoda/zmienna1/zmienna2 Kontroler obsłuży to tak:
Oczywiście, gdy zostanie podana większa ilość parametrów php poza zwróceniem błędu notatkowego nie zrobi nic, czyli jest ok. Problem jednak pojawia się gdy user poda mniej zmiennych, a w metodzie nie podano podstawowych wartości. Jestem leniem więc nie chce mi się co chwile pisać $zmienna1='', dlatego chciałbym w evalu, w razie nie podania wartości podać wartość pustą. Jak wyciągnąć informację o ilości zmiennych w metodzie w znośny sposób? Istnieje jakaś gotowa funkcja?? |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat który za pomocą funkcji eval wykonuje akcje z kontrolera Yhm, i po co eval? Kopiesz pod sobą dołek - takiego kodu akcelerator już Ci nie dopali (przynajmniej wg mojej wiedzy). Poza tym, otwierasz potencjalną lukę bezpieczeństwa. Cytat Problem jednak pojawia się gdy user poda mniej zmiennych, a w metodzie nie podano podstawowych wartości. To ustaw sobie je na null (jak? podstawy, sprawdź w manualu), a jak już chcesz tak bardzo sprawdzać na ilości argumentów, to func_num_args. Ale generalnie ideę masz - niestety - złą. Przejrzyj źródła frameworków MVC i zobacz, jak tam to jest skonstruowane. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 32 Dołączył: 14.04.2008 Skąd: Lenkowski.net Ostrzeżenie: (0%) ![]() ![]() |
Wiem, jak to na ogół jest skonstruowane (to mój kolejny dispatcher, a piszę dla przyjemności). Ostatnio była to po prostu jedna tablica.
Funkcja jaką podałeś do tego o czym mówię się nie nadaje, ponieważ, jak wiesz, wybiera dane z aktywnej funkcji, a nie z podanej przez atrybut. Cytat Poza tym, otwierasz potencjalną lukę bezpieczeństwa. Potencjalną luką bezpieczeństwa może być tak naprawdę wszystko. Nawet jeśli wybierał bym dane z GET'a to oczywiste że musiałbym je najpierw przefiltrować. Co oczywiście w 3 przypadkach mój frame robi automatycznie (przyjazne linki, get'y i posty). Nie rozumiem więc co może być tu przeszkodą. A jeśli chodzi o nie odpalenie, to mylisz się. Odpali, ale z błędem (da się go wyeliminować poprzez nie wyświetlanie, ale i tak nie odpalę metody z kontrolera). Cytat To ustaw sobie je na null Cytat Jestem leniem więc nie chce mi się co chwile pisać $zmienna1='' To oczywiste że można je ustawić na null, ale czy istnieje jakiś znośny sposób na wybranie ilości zmiennych w wybranej metodzie czy nie? Ten post edytował MWL 15.05.2010, 19:02:59 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 32 Dołączył: 14.04.2008 Skąd: Lenkowski.net Ostrzeżenie: (0%) ![]() ![]() |
Cytat (to mój kolejny dispatcher, a piszę dla przyjemności). Ostatnio była to po prostu jedna tablica. Cytat Przekazuj argumenty jako tablica, argument bedzie jeden a w nim tablica parametrow Zmieniłem to po to by było łatwiej i fajniej, a nie żeby było jak ostatnio (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
@MWL wydaje mi sie ze kombinujesz troche jak kon pod gorke :] co jest nieco zbedne i komplikuje niepotrzebnie sprawe.
To ze sie nakombinujesz to nie znaczy ze kod bedzie bardziej elegancki. Moze lepiej napisz co ci nie pasuje w pierwszym rozwiazaniu...? U mnie poprostu mam funkcje getParams() w klasie Router'a i tyle ktora zwraca mi pierwszy argument lub cala tablice argumentow z url'a ktory moze wygladac jak twoj lub inaczej. |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat A jeśli chodzi o nie odpalenie, to mylisz się. Odpali, ale z błędem (da się go wyeliminować poprzez nie wyświetlanie, ale i tak nie odpalę metody z kontrolera). Ekhm, czytaj uważnie: napisałem dopalenie, a nie odpalenie. W jaki sposób akcelerator (prekompilator kodu bajtowego) ma przygotować zbuforowany kod, który - w założeniu eval - może się zmieniać za każdym uruchomieniem skryptu? Jest to w wysoce niewydajne i przy nieco większym obciążeniu będą problemy. Poza tym, korzystanie z eval jest odradzane w każdym języku programowania; myślisz, że np. dlaczego developerzy przeglądarek internetowych tak często wspominają o problemach przy pisaniu kompilatorów JIT w kontekście eval? Cytat U mnie poprostu mam funkcje getParams() w klasie Router'a i tyle ktora zwraca mi pierwszy argument lub cala tablice argumentow z url'a ktory moze wygladac jak twoj lub inaczej. Też bym obstawał za podobną opcją. Ale najlepiej zobacz w jakimś frameworku, bo takie kombinowanie z parametrami, jakie jest u Ciebie, to trochę jak uderzanie młotkiem o kant kuli. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zdecydowanie wybrać rozwiązanie oparte na tablicy. Spróbuj pokombinować też z __call.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 22:06 |