Mam problem z przekazywaniem parametrów (różnych parametrów np. obiekt cryteria, id, sortowanie itd). Nie wiem w jaki sposób ładnie i elegancko przekazywać parametry a zarazem żeby w kodzie nie było bajzlu związanego z pobieraniem tych parametrów.
Podam na przykładzie mój problem
1. Mam helper, który wyświetla komentarze dla danego profilu. Helper wywoływany jest w templatce. Do tego helpera są przekazywane Id Profilu.
2. Helper tworzy obiekt $Criteria bo Jak wiemy symfony korzysta z propela. Tak więc aby wyciągnąć dane z bazy danych należy utworzyć obiekt kryteria
np.
<?php $criteria = new Criteria(); $criteria->add( OpiniaPeer::USLUGA_ID_USLUGA, $id_uslugi ); ?>
i przekazać go do metody propela
np.
<?php ...doSelect( $criteria ) ?>
3. Następnie jest wyświetlana strona (profil) wraz komentarzami do niego.
4. Operacje na komentarzach (kasowanie, dodawanie) wykonywanej jest przez ajax.
5. Gdy zostanie skasowany komentarz przez właściciela użytkownika, to wynik czyli lista komentarzy jest aktualizowana na stronie poprzez AJAX. Ale już nie pamięta iż ma wyświetlić komentarze tylko dla tego profilu.
6. Problem mój jest w jaki ładnie sposób miał by pamiętać do jakiego profilu komentarze ma wyświetlić.
Rozwiązania jakie nasuwają się:
W realiziowanym projekcie wywoływana jest akcja tworząca w/w obiekt a następnie na jego podstawie pobierane są dane z bazy i prezentowane na ekranie. Dalej w odpowiedzi na zapytania użytkownika www (kliknięcie butona) wykonywana jest kolejna akcja dla której potrzebny jest wcześniej wymieniony obiekt kryteria.
Teoretycznie obiekt można by tworzyć każdorazowo przy wywołaniu ostatniej akcji, na podstawie parametrów podanych url.
Niestety z wielu powodów takie rozwiązanie odpada (dynamiczna lista parametrów, wygląd url, podanie ciekawskiemu użytkownikowi danych do których nie powinien mieć wglądu - ostatnie powoduje że odpada również serializacja i przesłanie danych postem).
Wygodnym wydawałoby się wrzucenie omawianego obiektu do sesji i pobranie go w momencie gdy będzie potrzebny. Tutaj również pojawiają się problemy:
- z usuwaniem danych sesji więc należałoby ciągle aktualizować daną zmienną (a nie tworzyć kolejne).
- ponownie problem z usuwaniem zmiennych gdyż obecnie można otworzyć strony serwisu w kilku kartach/zakładakach przeglądarki. W każdej kart pojawi się wcześniej ustawiona zmienna, gdyż zmienne sesyjne usuwane są z zamknięciem okna przeglądarki (a nie kart).
Proszę o rady w jaki sposób radzicie sobie z takimi przypadkami. Dodam że używam symfony 1.2.