Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Intercepting Filter
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
bela
Powiedzcie mi czy dobrze myśle o tym wzorcu smile.gif

Mamy sobie FilterManager, i do niego ładujemy filtry (::addFilter, config xml, nie ważne jak). Filtry mogą się wykonywać przed lub po wykonaniu akcji. Przykład filtra : StartOutputBufferingFilter, AuthorizationFilter, CacheFilter. I na przyklad CacheFilter stwierdza, że mamy swieży cache i czy może on zaprzestać wywoływania akcji ? Albo AuthorizationFilter, wywoła akcje loginForm ?
aleksander
a jak odróżniać, który filtr jest pre a który post? Twżyć przed i po generowaniu strony dwie instancję kontrolera filtrów i wrzucać odpowiednie filtry? ew. w konfiguracji (np xml) zapisać które filtry wywoływać przed a które po?
bela
  1. <?xml version="1.0" ?>
  2. <filters>
  3.    <pre>
  4.        <filter name="DupaFilter" mapping="pl.bela666.odin.filter.DupaFilter" />
  5.    </pre>
  6. </filters>


może tak ? biggrin.gif
hawk
A po co rozróżniać przed/po? Sugeruję dekoratory.

Edit: bela_666, ciekawy jestem tego pl.bela666.odin.filter.DupaFilter. Zamieniasz to na katalog (tzn. kropki na slashe i jakiś root dir)? Przepychasz przez autoloader? Robisz using() tak jak np. Prado i wstawiasz do include_path?

W momencie, kiedy każdy mój plik ma po kilka require_once, zaczyna mnie to wkurzać winksmiley.jpg.
bela
Cytat(hawk)
Edit: bela_666, ciekawy jestem tego pl.bela666.odin.filter.DupaFilter. Zamieniasz to na katalog (tzn. kropki na slashe i jakiś root dir)? Przepychasz przez autoloader? Robisz using() tak jak np. Prado i wstawiasz do include_path?


Tak, zamieniam kropki na slashe przez Odin::import(), jak nie ma pliku to rzucam wyjątek. Nazwy w konwencji Javy winksmiley.jpg
Vengeance
Mam pewne pytanie związane z tym wzorcem. Możliwe że w złe miejsce "wsadzam" obsługę tego typu rzeczy, ale poinformujcie mnie o tym :]

Przykładowa aplikacja, dodajemy kilka filtrów w tym filtr odpalający podaną przez użytkownika akcje. Wszystkie filtry w którymś tam momencie wywołują $this->NextFilter(); co powoduje przejście do kolejnego filtra.

Jak przy takim schemacie umożliwić jednemu filtrowi wstrzymanie uruchomienia innego. Np. akcja sprawdza autoryzacje, ponieważ użytkownik jest niezalogowany zostaje uruchomiona akcja Login a nie podana przez użytkownika w parametrze akcja DeleteNews.

Ale co ważne, cała reszta filtrów ("w dół") muszą być odpalane (np. filtr od Bemchmarka liczący czas musi być odpalony na samym końcu).
CyberBob
Według mnie akcji DeleteNews nie ma potrzeby wstrzymywać, a to dlatego że nigdy nie powinno dojsc do jej utworzenia, w moich schmaciku myślenia to tak, najpierw actionManager uruchamia sobie autentykacja w zależności od tego czy użytkownik jest zalogowany uruchamia w dalszej kolejnosci autoryzacje, bądz wspomnianą przez Ciebie actionLogin, czyli puentując ja potraktowałbym jako jedno, sprawe autentykacja/autoryzacji, która będzie zracać kolejną do wykonania akcje (login,deleteNews)

Jeżeli mijam sie z prawdą nie bic smile.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-2024 Invision Power Services, Inc.