[BLOG] Dodawanie kom. tylko dla zalogowanych

Witam, bardzo jeszcze gubię się w tym Yii i nie za bardzo rozumiem jak to wszystko działa.

Przerabiam aplikację Blog na własne potrzeby i utknąłem w miejscu gdzie chcę aby TYLKO zalogowaniu użytkownicy mogli dodawać komentarze do postów.

Przerobiłem bazę danych dodając comment.author_id i wiążąc go obcym kluczem tbl_user.id. Dodałem też następującą relację w modelu Comment:


'author' => array(self::BELONGS_TO, 'User', 'author_id')

ukryłem formularz w widoku dzięki "Yii::app()->user->isGuest" (które zwraca false gdy ktoś jest zalogowany).

Teraz problem jest następujący: Jeżeli ktoś mimo ukrycia formularza, wyśle $_POST z komentarzem to sypią się błędy, bo po stronie systemu nie ma żadnej blokady przeciw niezalogowanym użytkownikom. Gdyby dane formularza leciały przez kontroler Comments to za pomocą accessRules() bym to ustawił. Jednak leci to zupełnie inną drogą, której nie rozumiem i proszę o pomoc w tej sprawie.

Dziękuję i pozdrawiam.

Prawdopodobnie nie masz w formularzu zdefiniowanego parametru ‘action’ co sprawia, że formularz jest wysyłany do tej samej akcji kontrolera (np. Post/view) która jest dostępna dla wszystkich. Najlepiej jest wygenerować kontorler ‘CommentsController’, gdzie akcja ‘create’ jest zastrzeżona dla zalogowanych użytkowników. Ustawiasz wtedy ‘action’ formularza na ‘comments/create’. jeśli użytkownik nie jest zalogowany to zostanie przeniesiony do formularza logowania. Tyle, że po zalogowaniu powiniem przejść do akcji post/view a nie commentas/create ale to szczegół …można jeszcze treść formularza zapisać z zmiennej sesyjnej tak aby po zalogowaniu miał treść formularza a nie puste pole …Ale to już zależy jak chcesz to zrobić.

o dzięki za taki pomysł. myślę że dam radę to zrobić.

chcę, aby wcale nie wyświetlało formularza, tylko napis “zaloguj się, aby dodawać” :)

ale jakby ktoś próbował coś wysłać to właśnie odniosę go do formularza logowania. mam nadzieję że uda mi się jakoś przesłać id tego posta, najwyżej będę pytał znowu. Pozdro!

EDIT: Dałem id w input hidden, bo chyba nigdzie indziej on nie jest przekazywany. Myślałem tez aby umieścić go w adresie action formularza, ale tak jak jest wydaje mi się bardziej poprawnie.