Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] potrzebne przekierowanie z pluginu ?
Forum PHP.pl > Forum > PHP > Frameworki
trucksweb
robie w celach naukowych plugin do komentowania wszystkiego co sie chce- narazie pod uwage wzialem content.

w szablonie newsa includuje component i ten poprawnie sie laduje. w action dalem mu link do danego artykulu.
Teraz w jaki sposob wywolac zapis do bazy-tzn. zeby po wyslaniu postem odswiezyla mi sie strona i dodal wpis do bazy.

Potrzebny jest do tego routing zeby najpierw wszedl do pluginu/componentu?

jakos sie zgubilem patrzac na przykladowe pluginy z symfony
destroyerr
Cytat
w action dalem mu link do danego artykulu

Raczej powinieneś dać adres do akcji w swoim komponencie, która odpowiada za dodanie komentarza.

Cytat
zeby po wyslaniu postem odswiezyla mi sie strona i dodal wpis do bazy.

Takie rzeczy to bez problemów znajdziesz w dokumentacji.

Cytat
Potrzebny jest do tego routing zeby najpierw wszedl do pluginu/componentu?

Routing jest potrzebny.


Nie jestem pewien ale mam wrażenie, że masz jakiś błąd w założeniach, więc dla jasności:
  1. Użytkownik wchodzi na stronę artykułu:
    • na tej stronie ma wyświetlony artykuł oraz komentarze
    • komentarze to komponent w Twoim pluginie
    • formularz dodawania komentarza powinien kierować do akcji w pluginie
  2. Użytkownik wypełnił formularz i wysłał go:
    • akcja w pluginie zapisuje komentarz
  3. Użytkownik jest przekierowywany:
    • możesz przekierować na podstawie nagłówka referer
    • albo możesz rozpoznać dla jakiego obiektu komentarz został dodany i przekierować na jego stronę
trucksweb
tak, tak wszystko sie zgadza ...ale teoretycznie

w szablonie artykulu mam:
  1. include_component('comment', 'form', array('comment_form' => isset($comment_form) ? $comment_form : null)

ktory wyswietla formularz kierujacy do akcji comment/add.

W akcji comment/add mam:

  1. if($request->isMethod(sfRequest::POST))
  2. {
  3. $this->comment_form = new ContentCommentForm();
  4. $formValues = $request->getParameter('catalog_comment');
  5.  
  6. $this->comment_form->bind(array_merge($formValues, array('captcha' => $formValues['captcha'])));
  7.  
  8. if ($this->comment_form->isValid())
  9. {
  10. $this->comment_form->save();
  11. }
  12. else
  13. {
  14. $referer = str_replace($request->getScriptName(), '', $formValues['referer']);
  15. $params = $this->getContext()->getRouting()->parse($referer);
  16. unset($params['_sf_route']);
  17. $url_params = $this->getContext()->getController()->convertUrlStringToParameters($referer);
  18. $url_params = array_merge($params, $url_params[1]);
  19.  
  20. foreach ($params as $param => $value)
  21. {
  22. $request->setParameter($param, $value);
  23. }
  24.  
  25. $this->forward($params['module'], $params['action'], array('comment_form' => 'ffff'));
  26. }
  27. }



no i teraz, jak wypelnie formularz poprawnie to dokona sie zapis do bazy, ale jesli zrobie blad to po odswiezeniu strony nie robi sie repopulacja formularza.
Czyli w momencie forwardu do akcji artykulu nie mam dostepu do zmiennej $this->comment_form

Czy cos robie zle ?
destroyerr
Cytat
Czyli w momencie forwardu do akcji artykulu nie mam dostepu do zmiennej $this->comment_form

Napisz jeszcze gdzie nie masz tego dostępu.

Moim zdaniem komentarze i (np.) newsy nie powinny sobie przekazywać żadnych formularzy (tak jak zrobiłeś to w szablonie).
Formularz powinien być jeśli już (ale też niekoniecznie musi) przekazywany tylko między akcją dodawania komentarza i komponentem wyświetlania komentarzy.
trucksweb
mam tak jak napisales:

Użytkownik wchodzi na stronę artykułu:
-na tej stronie ma wyświetlony artykuł oraz komentarze
-komentarze to komponent w Twoim pluginie - tu mam include_component('comment', 'form', array('comment_form' => isset($comment_form) ? $comment_form : null)
-formularz dodawania komentarza powinien kierować do akcji w pluginie (i kieruje comment/add)
Użytkownik wypełnił formularz i wysłał go:
-akcja w pluginie zapisuje komentarz (akcja comment/add zapisuej jesli jest ok, jesli nie powinna repopulowac formularz)
Użytkownik jest przekierowywany:
-możesz przekierować na podstawie nagłówka referer (przekierowanie dziala, ale formularz nie ma repopulacji)
-albo możesz rozpoznać dla jakiego obiektu komentarz został dodany i przekierować na jego stronę

jaro87
Zobacz sobie na stronie Symfony jak zrobione są gotowe pluginy tego typu (podałbym link ale wyświetla mi się "Wpisałeś link do strony do której administrator nie pozwala linkować") Używałem tylko sfPropelActAsCommentableBehaviorPlugin ale pozostałe, sądzą po opisach mają podobną funkcjonalnośćsmile.gif
trucksweb
ok, przerobilem na ajaxa i dziala ok.

tez patrzylem na ten plugin, ale nie rozumialem kilku rzeczy ktore sa w nim zdefiniowane a narazie nie mam czasu doszukiwac sie tego w dokumentacji.

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.