Hej.
Prześledziłem wątek i mam propozycję na rozwiązanie problemu HttpRequest i połączenia go z Routerem, ale nurtuje mnie jedno - jak przekazujecie do widoku wygenerowane linki i jak je generujecie (gdzie?).
U mnie to wygląda tak:
HttpRequest(Połączony z Routerem) -> FrontController -> Action -> Services -> DAO -> Services -> Action (Ta zwraca kontener z danymi - taki transporter między warstawami aplikacji) -> FrontController -> View -> Template.
I teraz może lekutko to streszcze:
- HttpRequest dziedziczy po klasie, która stanowi zbiór metod do manipulowanie kontenerem danych(bo w zasadzie czym jest HttpRequest jak nie zbiorem danych o żądaniu) na zasadzie klucz / wartość i teraz ktoś pytał tutaj o walidację - ten problem odchodzi, bo w HttpRequest dzięki dziedziczeniu mam dostępne metody getStringVar, getIntVar, getArrayVar i getVar(jeśli nie wiem co dostane). W przypadku gdy dane są w innym formacie mogę wyrzucić wyjątek i odpowiednio go obsłużyć. HttpRequest jest kontenerem ktory w aplikacji jest przekazywany w dol, czyli do akcji itd.
- Jezeli chodzi o ladne URL'e i Router to mozna albo zmieniac implementacje klasy HttpRequest (mi to nie lezy), albo jakos te dwie warstwy polaczyc - ja to widze tak: HttpRequest w kostruktorze dostaje obiekt typu Router (obiekty Routerow sa implementowane na bazie spojnego interfejsu) i dzieki temu mozemy wymieniac sam obiekt na zasadzie podawania roznych implementacji jednego typu (Router):
<?php
$request = new HttpRequest(new NiceUrlsRouter());
?>
Teraz $request może bez problemu wywołać metodę ustaloną w interfejsie Router (np. decodeUrl) w kostruktorze i przy tworzeniu instancji $request odpowiednio te dane które zwróci Router ustawic na zasadzie klucz / wartosc.
I wszystko piknie... obiekt typu HttpRequest leci w dół do akcji - tam akcja ma informacje o parametrach itd.
Pytanie jak to zrobić w drugą stronę - jak generować automatycznie linki na bazie tego co dostarcza Router - czyli przekazywać je do szablonów, lub innego typu widoków? - nie potrafię tego sobie umiejscowić w całej aplikacji. Może ktoś z was ma jakieś sugestie.
Pozdrawiam.
anas