![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 1 Dołączył: 9.10.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mam formularz rejestracyjny (widok). Są dwa kontrolery: IndexController i EmailController.
W dużym skrócie, co chcę osiągnąć 1) IndexController odpala widok, który wyświetla formularz 2) Po wysłaniu formularza, IndexController zapisuje dane do bazy (za pomocą jakiegośtam modelu) 3) IndexController wywołuje EmailController (robię to za pomocą _forward() ) 4) EmailController pobiera z bazy szablon wiadomości (znowu jakiś model) 5) EmailController wysyła maila (wykorzystałem Zend_Mail) 6) Teraz chcę wyświetlić komunikat, że link z kodem aktywacyjnym został wysłany mailem. Punkty 1-5 mam zrealizowane. Utknąłem na 6). Nie wiem w jaki sposób i w którym miejscu wyświetlić ten komunikat. Nie mogę tego zrobić w EmailController, ponieważ będzie on wykorzystany do wysyłania różnych maili, w różnych "modułach" serwisu - a zatem za każdym razem będzie wyświetlał inny komunikat. Najlepiej gdyby z EmailController dało się "wrócić" do miejsca(kontrolera i akcji) z którego zostal odpalony. Coś w tym stylu:
Próbowałem drugi raz użyć _forward(). ale wtedy działa tylko ten drugi. Siedzę nad tym od ponad 3 godzin. Wymęczyłem dokumentacje ZF, googla i wszelkie znane mi źródła. To mój pierwszy "projekt" z wykorzystaniem ZF i zarazem pierwszy kontakt z MVC. Jestem pewien, że robię jakiś głupi błąd. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 1 Dołączył: 9.10.2003 Ostrzeżenie: (0%) ![]() ![]() |
Uparciuch ze mnie (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif)
Oczywiście żaden problem mogę przerobić EmailController tak żeby przyjmował całą tablicę tag'ów. EmailController musi wywołać IndexController, jak rozumiem w metodzie postDispatch(). Czyli wiąże się to z dwoma konsekwencjami: 1) EmailController musi "wiedzieć" gdzie ma "wrócić" po zakończeniu (tj jaką akcję/kontroler wywołać). Dla mnie jest to sprzeczne z zasadą hermetyzacji, kontroler powinien "zrobić swoje" i po prostu zakończyć działanie. Jeżeli ma służyć wyłącznie do wysyłania/archiwizacji poczty, to nie powinien "zajmować się" odpalaniem jakichś widoków. 2) EmailController zawsze po zakończeniu będzie wywoływał IndexController A co jeśli będę chciał wykorzystać EmailController w przyszłości, w innym kontrolerze itp (czyli powrót do IndexControllera będzie niepożądany) Nie chcę szukać dziury w całym, ale gdyby przyjąć, że klasa wysyłająca maila nie jest kontrolerem, tylko po prostu biblioteką, to cała sprawa byłaby dziecinnie prosta - stworzyłbym sobie plik w library/costam/
I cała ta otoczka MVC jest, jak na razie , wyłącznie utrudnieniem dla mnie - widać jeszcze sporo nauki przede mną (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) W każdym razie na chwilę obecną rozwiązałem to tak, że napisałem plugin Zend_Controller'a. Plugin ma statyczną tablicę przechowującą listę akcji do wykonania. Za pomocą metody Plugin::addAction() dopisuję sobie akcje do tej tablicy. Później w Plugin::postDispatch() odpalam po kolei akcje z listy. Czyli mam taki nędzny łańcuch akcji. Muszę jeszcze sprawdzić, czy nie ma konfliktów z Zend_Controller_Action::_forward() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 19:04 |