Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [framework] Ruter .. więcej na głowie .., dyskusja .. pomysły .. rozwiązania
widmogrod
post 27.01.2007, 14:00:59
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 28.10.2005
Skąd: kraków

Ostrzeżenie: (0%)
-----


Witam
Ostatnio zastanawiam się nad ruterem w FW, jego zadaniem jest sparsowanie url’a pobranie z niego nazwy kontrolera, akcji i parametrów (tak jest u mnie)
1. co jeżeli podstawowy wzorzec rutera chce zmienić z
/kontroler/action/pram1/param2 ..
na
/jezyk/kontroler/akcja/param1/param2 ..

Jednym z rozwiązań na jakie wpadłem to jest tworzenie wzorów rutera tak jak jest np.: w Zend FW ale jak pobrać wartość języka w tak zdefiniowanym formacie parsowaniu przez rutera

/:Lang/:controller/:action

może wykorzystać metode __call() i po odpowiednim sparsowanu w/w formatu
Pobierać wartości w sposób dynamiczny tj
  1. <?php
  2. $this->getXXX();
  3. ?>

XXX – nazwa parametru
np.
  1. <?php
  2. $this->getLang();
  3. ?>

Oczywiście getController(), gerAction(), getParams() nie były by tworzone w __call() tylko bedą zaimplementowane na ‘stałe’.

Czy użytkownik powinien mieć dostęp do parametrów rutera, żeby mógł pobrać dany parametr .. co na to koncepcja MVC?? i wasza praktyka

Następna kwestią jest to ze oprócz danych z GET (SERVER) mamy też dane przekazywane z POST,

W moim frameworku umożliwiłem odpalanie akcji również za pomocą danych przekazanych w POST (dodawanie do łańcucha akcji) w sumie za jednym przeładowaniem mogłem wykonać trzy akcje z Urla, po wysłaniu formularza z zdefiniowaną akcja,
  1. <?php
  2. $this->AformOpen(array(index, akcja1)); // otwiera formularz z zakodowana akcja do odpalenia
  3. ?>


i po naciśnięciu buttona również z definiowana w nim akcje.
  1. <?php
  2. $this->AButon( array(index, akcja2));
  3. ?>

Czy takie rozwiązanie ma sens
Jak powinny być odczytywane dane akcji przekazywane w POST.
Może utworzyć specjalny filtr który będzie przeszukiwał dane POST i jeżeli znajdzie odpowiednie klucze doda nowa akcje do łańcucha akcji czy tez stworzyć klasę do obsługi żądań akcji POST.
Wydaje mi się ze dobrym rozwiązanie było by stworzenie klasy dziedziczącej po ruterze np. PostRuter

Co o tym sadzicie, jak wy rozwiązujecie tą kwestie.

I jeszcze jedno wpadłem na pomysł walidacji formularzy taki ze dany formularz jest wysyłany do odpowiedniego walidatora np.:
  1. <?php
  2. $this->AFormOpen(nazwa_walidatora); // otwiera formularz z nazwa walidatora do odpalenia
  3. ?>

I później w kontrolerze akcji sprawdzamy jednym poleceniem czy formularz jest poprawny
  1. <?php
  2. $this->isValid(nazwa_walidatora)
  3. ?>


Mam nadzieje ze nie na mieszałem
Pozdrawiam


--------------------
http://blog.widmogrod.info

KontorX – rozszeżenie bibliotek Zend Framework - http://code.google.com/p/kontorx/
KontorX – przykłady - http://kontorx.widmogrod.info

Cappuccino Framework - http://wiki.widmogrod.info/cappuccino
Go to the top of the page
+Quote Post
MalCom
post 27.01.2007, 15:55:58
Post #2





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2006
Skąd: Wodzisław Śl.

Ostrzeżenie: (0%)
-----


Moim skormnym zdaniem, router, w przypadku wlaczenia urli z langiem (w formacie jaki podales), powinien pierwsza zmienna traktowac jako jezyk i przekazywac ja do kontrolera.
Wtedy w kazdym kontrolerze dziedziczacym od bazowego kontorlera bylaby dostepna wartosc jezyka z jakim zostal wywolany skrypt jako $this->lang; badz pod metoda $this->GetLang();.
Uzytkownik/koder mialby do niej bezproblemowy dostep winksmiley.jpg

Wydaje mi sie to najprostsze rozwiazanie, nie trzeba za duzo babrac w kodzie (zmian), przez co nie starcimy na wydajnosci winksmiley.jpg

Tak, mam mala obsesje na wydajnosci i optymalizacji, ot takie zboczenie po porogramwoaniu w roznych jezykach tongue.gif


--------------------
malcom.pl | xime.xorg.pl | http://wxwidgets.org.pl | software developer c/c++ php perl asm
Go to the top of the page
+Quote Post
menic
post 27.01.2007, 16:18:29
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

Ostrzeżenie: (0%)
-----


IMHO idea routera jest troche inna. Powinien on tylko rozszyfrowac url i dane przekazać do kontrolera ktory juz sobie zrobi z tym co chce smile.gif


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
widmogrod
post 27.01.2007, 17:12:41
Post #4





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 28.10.2005
Skąd: kraków

Ostrzeżenie: (0%)
-----


@menic

@MalCom - fakt __call() może być trochę wolne ale jeżeli to jest tylko w jednej aplikacji muszę dodawać specjalnie metode getLang() a w taki sposób wystarczyło by w kotrolerze
  1. <?php
  2. $this->getRuter()->getLang()
  3. ?>

lub
  1. <?php
  2. Ruter::getInstance()->getLang();
  3. ?>
i wsjo ..

Musze jeszcze to przemysleć .. moze z dalszej dyskusji na coś wpadne ..

a co sądzicie o wywoływaniu akcji przez `post`! i wywoływaniu w taki sposób np. walidacji formularzy??


--------------------
http://blog.widmogrod.info

KontorX – rozszeżenie bibliotek Zend Framework - http://code.google.com/p/kontorx/
KontorX – przykłady - http://kontorx.widmogrod.info

Cappuccino Framework - http://wiki.widmogrod.info/cappuccino
Go to the top of the page
+Quote Post
MalCom
post 27.01.2007, 18:05:28
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2006
Skąd: Wodzisław Śl.

Ostrzeżenie: (0%)
-----


Tak, czy tak gdzies ta metode musisz dodac, niezalenie czy __call() czy stala, ale jak wspomnial menic router powinien spelniac swoje zadanie, a kontroler swoje, wiec najpewniej byloby dane na temat jezyka razem z innymi danymi przekazywac do kontrolera winksmiley.jpg

Moze sie myle, bo wkoncu na FW malo cokolwiek pisalem, zawsze jakos wolalem swoje klasy/funkcje. Ale aktualnie skrobie cos na CI, bo chce jak najpredzej to zrobic (i wrocic do swojego xime) i nie babrac sie za bardzo z kodem winksmiley.jpg
Sam myslalem o jakims malym, swoim frameworku dosotsowanym do moich potrzeb i wymagan, bez zbednego kodu, ktorego nigdy bym nie uzywal (np. uzywam tylko mysql, to niepotrzebnie dorzucac jakies activerecordy i inne), dzieki czemu wydajnosc byla dosyc dobra winksmiley.jpg
Z drugiej strony, zaczynac projekt, ktory byc moze kilka razy wykorzystam, a pozniej umrze, wiec narazie olewam to, bo i tak za duzo na glowie mam innych projektow w cpp winksmiley.jpg

Wracajac do tematu, tez bede musial w przyszlosci kombinwoac jak w CI zrobic obsluge jezyka, ktory bedzie podawany jako 1 parametr, ale to przyszlosc winksmiley.jpg

Co do akcji przez post, nie mam zdania, nigdy nie potrzebowalem takiej metody, wiec sie tym nie interesowalem. Choc pomysl wydaje sie ciekawy winksmiley.jpg

Ten post edytował MalCom 27.01.2007, 18:06:50


--------------------
malcom.pl | xime.xorg.pl | http://wxwidgets.org.pl | software developer c/c++ php perl asm
Go to the top of the page
+Quote Post
menic
post 27.01.2007, 18:23:07
Post #6





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

Ostrzeżenie: (0%)
-----


Zawsze jezyk mozesz zrobic przez mod_rewrite. Standardowo jezyk polski jest uruchamiany np. przez indexPL.php a jak ktos sobie wybierze angelski to skrypt bedzie ueuchamiany zIndexEN.php smile.gif

Z do do tego POST, to kiedys myslalem sobie aby wszystko przekazywac wlasnie przez post odpowiednimi naglowkami, ale to byl tylko zamysl smile.gif


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
widmogrod
post 27.01.2007, 19:39:42
Post #7





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 28.10.2005
Skąd: kraków

Ostrzeżenie: (0%)
-----


Cytat
jezyk polski jest uruchamiany np. przez indexPL.php a jak ktos sobie wybierze angelski to skrypt bedzie ueuchamiany zIndexEN.php


takie rozwiązanie mi się nie podoba wyobraźmy sobie że będę miał 20 języków co wtedy 20x index .. nie ..

Raczej pozostanę przy mojej koncepcji .. teraz zostaje kwestia jak poinformować klasę czy zostawić to programiście i z każdą instancja klasy ustawiać język przez $this->getLang() czy gdzieś w konfiguracji ustawić monitorowanie odpowiedniego parametru rutera .. ale to juz inny temat ..

PS. Może jeszcze coś dopisze .. zmykam na %%% ...


--------------------
http://blog.widmogrod.info

KontorX – rozszeżenie bibliotek Zend Framework - http://code.google.com/p/kontorx/
KontorX – przykłady - http://kontorx.widmogrod.info

Cappuccino Framework - http://wiki.widmogrod.info/cappuccino
Go to the top of the page
+Quote Post
LBO
post 1.02.2007, 01:12:06
Post #8





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A nie możecie zdefiniować ścieżek (routes) dla routera, w którym odpowiednia zmienna, będzie określała język?
np.
  1. <?php
  2. $router->defineRoute('default', ':lang/:controller/:action/*', array('lang' => 'pl', 'controller' => ' index', 'action' => 'index');
  3. ?>

dla adresu URI
Cytat

zmienna $lang miałaby wartość 'en'.
Go to the top of the page
+Quote Post
widmogrod
post 2.02.2007, 15:08:34
Post #9





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 28.10.2005
Skąd: kraków

Ostrzeżenie: (0%)
-----


Cytat
A nie możecie zdefiniować ścieżek (routes) dla routera, w którym odpowiednia zmienna, będzie określała język?


Właśnie tak robię tylko ze wartość języka pobieram przez metode getLang() i wszystko pięknie ..

Pozdrawiam


--------------------
http://blog.widmogrod.info

KontorX – rozszeżenie bibliotek Zend Framework - http://code.google.com/p/kontorx/
KontorX – przykłady - http://kontorx.widmogrod.info

Cappuccino Framework - http://wiki.widmogrod.info/cappuccino
Go to the top of the page
+Quote Post
Speedy
post 2.02.2007, 16:47:22
Post #10





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Cytat(menic @ 27.01.2007, 16:18:29 ) *
IMHO idea routera jest troche inna. Powinien on tylko rozszyfrowac url i dane przekazać do kontrolera ktory juz sobie zrobi z tym co chce smile.gif


Wg mnie taka koncepcja jest właściwa winksmiley.jpg. Raczej nie ma sensu tworzenie reguł url-a i jemu podobnych wytworów. Podczas gdy podaje się aplikacji jakieś parametry, router może zrobić z nich tablicę i wtedy nie jest na sztywno ustalone, który parametr czemu ma odpowiadać, gdyż odwołujesz w zależności od potrzeby, do odpowiednich wartości w tablicy. Kiedyś rozumowałem trochę inaczej i przez to miałem kilka problemów, ale na szczęście da się zaprojektować elementy sterujące aplikacją w sposób bardziej elastyczny winksmiley.jpg.
Można to zrobić zarówno z wykorzystaniem mod_rewrite, jak i bez niego.

Ten post edytował Speedy 2.02.2007, 16:48:03


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 09:27