Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: HttpRequest a Router i generator linków
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Stron: 1, 2
Vengeance
robisz dwa oddzielne FrontControllery , jeden ustawia Request dla CMD drugi dla HTTP... ja tak to robie
Vomit
Wiem juz na czym polega FronController i jak przepuscic URL przez Router aby FronController podjał odpowiednai akcje.

Nie wiem jednak w jaki sposob Router przyczynia sie do tworzenia URL'i i gdzie to nastepuje. A moze poprostu cos zle wyczytalem?
squid
@Vengeance - ja nie chcialbym robic 10 kontrolerow a kazdy uzywany do czego innego, kontroler ma byc jeden. Poza tym i tak trzeba wiedziec jak wywolano skrypt chyba ze umiescisz oba kontrolery w osobnych plikach (ich wywolania).
Vomit
Jeszcze odnosnie mojego pytania. Jesli Router odpowiada za tworzenie linkow to w ogole nie widze mozliwosci polaczenia tego z systemem template'ów. Przeciez kazdy taki, stworzony link musialby byc dodany jako kolejna zmienna do szablonu...
anas
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):

  1. <?php
  2. $request = new HttpRequest(new NiceUrlsRouter());
  3. ?>


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
bigZbig
Jezeli obiekt Requesta jest dostepny w miejscu generowania widoku to za jego posrednictwem mozna wywolac metode Routera odpowiedzialna za generowanie linków. Natomiast do szablonu przekazujesz juz link w postaci wygenerowanego adresu.
NuLL
bigZbig - po tyle roboty questionmark.gif

Ja osobiscie wywalilem wszystkie silniki szablonowe z swoich projektyow na rzeczy natywnego php i pokrotce to wyglada tak

  1. <?php
  2. class tpl
  3. {
  4. public static function link($parametry)
  5. {
  6.  echo router::getInstance()->generateLink($parametry_do_przekazania);
  7. }
  8. }
  9. ?>

A w szablonie
  1. Cos tam
  2. <a href='<?php tpl:link('modul','akcja');'>Tekst</a>

Thats all smile.gif Proste jak drut - dobre na wszystko winksmiley.jpg Oczywiscie tresc klasy tpl mocno pogladowa.
sf
@NULL: chce wymienić router na router2 i wszystko u Ciebie pada
NuLL
Ale moj router ma drivery guitar.gif cool.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.