Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Komponenty i panele
Forum PHP.pl > Forum > PHP > Frameworki
blackroger
Mam problem dotyczący panelu. Otóż mam stworzyć panel, który jest widoczny cały czas podczas wędrówki po stronie. Jest to panel logowania lub, gdy użytkownik jest zalogowany to są jego dane oraz menu edycji danych.

Zrobiłem to tak:
mam moduł main, w którym mam komponent executeLoginpanel():

  1.  
  2. public function executeLoginpanel()
  3. {
  4. $this->form = new LoginForm();
  5. $this->message = $this->getUser()->getFlash('text');
  6. $this->module = $this->getRequestParameter('module');//because it has to know where redirect
  7. $this->action = $this->getRequestParameter('action');
  8.  
  9. $this->getUser()->clearCredentials();
  10. $this->getUser()->setAuthenticated(false);
  11.  
  12. if($this->getRequest()->isMethod('post'))
  13. {
  14.  
  15. $login = $this->getRequestParameter('login[login]');
  16. $pass = $this->getRequestParameter('login[pass]');
  17.  
  18. $c = new Criteria();
  19. $c->add(UsersPeer::LOGIN, $login);
  20. $c->add(UsersPeer::PASS, md5($pass));
  21. $u = UsersPeer::doSelectOne($c);
  22.  
  23. if($u)
  24. {
  25. $this->getUser()->setAuthenticated(true);
  26. $this->getUser()->addCredentials('normal_user');
  27. $this->getUser()->setAttribute('usid', $u->getUsid(),
  28. 'user');
  29. $this->getUser()->setAttribute('login', $u->getLogin(),
  30. 'user');
  31. }//if $u exist
  32. else
  33. {
  34. $this->getUser()->setFlash('text', 'Access danied');
  35.  
  36. return $this->getContext()->getController()->redirect('main/index');
  37. }
  38. }//end if($this->getRequest()->isMethod('post')
  39. }//end executeLoginpanel
  40.  
  41.  


no i partial do niego:

  1.  
  2. <div class="login_panel">
  3. <?php
  4. echo $module;
  5. echo $action;
  6.  
  7. ?>
  8. <form method="post" action="<?php echo url_for($module.'/'.$action); ?>">
  9. <table>
  10. <tr>
  11. <td><a href="/register/index">Register</a></td>
  12. <td><?php echo $form['login']->renderLabel(); ?></td>
  13. <td><?php echo $form['login']; ?></td>
  14. <td><?php echo $form['pass']->renderLabel(); ?></td>
  15. <td><?php echo $form['pass']; ?></td>
  16. <td><input type="submit" name="ok_login" class="confirm_button" value="OK" /></td>
  17. </tr>
  18. <tr>
  19. <td></td>
  20. <td>
  21. <?php echo $form['login']->renderError(); ?>
  22. </td>
  23. <td></td>
  24. <td>
  25. <?php echo $form['pass']->renderError(); ?>
  26. </td>
  27. </tr>
  28. <tr>
  29. <td></td>
  30. <td colspan="4">
  31. <?php echo $message; ?>
  32. </td>
  33. </tr>
  34. </table>
  35. </form>
  36. </div>
  37.  
  38.  


Wszystko dziala do momentu, gdy probuje go wywołać z innego modułu...powiedzmy register. Komponent się pojawia, ale gdy daje na panelu ok to przekierowuje mnie z powrotem na main i bieżąca strona powiedzmy z czymś już znika...
Jak najlepiej zrobić, żeby panel miał pełną funkcjonalność i żeby był dostępny z każdego modułu...

A wywołuję w templetach main/index i register/index tak:

  1.  
  2. <?php if ($sf_user->isAuthenticated()): ?>
  3. <?php include_component('profile', 'userpanel') ?>
  4. <?php else: ?>
  5. <?php include_component('main', 'loginpanel') ?>
  6. <?php endif; ?>
  7.  
destroyerr
Od logowania jest akcja a nie komponent. Przenieś logowanie do akcji, a samo wyświetlanie formularza i danych pozostaw w komponencie.
blackroger
Czyli w każdym module mam umieszczać taki kod??

  1. $this->form = new LoginForm();
  2. $this->message = $this->getUser()->getFlash('text');
  3. $this->module = $this->getRequestParameter('module');//because it has to know where redirect
  4. $this->action = $this->getRequestParameter('action');
  5.  
  6. $this->getUser()->clearCredentials();
  7. $this->getUser()->setAuthenticated(false);
  8.  
  9. if($this->getRequest()->isMethod('post'))
  10. {
  11.  
  12. $login = $this->getRequestParameter('login[login]');
  13. $pass = $this->getRequestParameter('login[pass]');
  14.  
  15. $c = new Criteria();
  16. $c->add(UsersPeer::LOGIN, $login);
  17. $c->add(UsersPeer::PASS, md5($pass));
  18. $u = UsersPeer::doSelectOne($c);
  19.  
  20. if($u)
  21. {
  22. $this->getUser()->setAuthenticated(true);
  23. $this->getUser()->addCredentials('normal_user');
  24. $this->getUser()->setAttribute('usid', $u->getUsid(),
  25. 'user');
  26. $this->getUser()->setAttribute('login', $u->getLogin(),
  27. 'user');
  28. }//if $u exist
  29. else
  30. {
  31. $this->getUser()->setFlash('text', 'Access danied');
  32.  
  33. return $this->getContext()->getController()->redirect('main/index');
  34. }
  35. }//end if($this->getRequest()->isMethod('post')
  36.  
  37.  
  38.  


Chciałem użyć komponentu do tego żeby nie powtarzać tego kodu ciągle przy każdej stronie .....
Bo przecież jak ktoś powiedzmy będzie chciał naraz się zalogować będąc na jakiejś stronie...to żeby pozostać na stronie bieżącej bez przeładowania na stronę główną do której się akcja logowania będzie odnosić to musiałbym każdą stronę zaopatrzyć w kod logowania.
Gribo
najlepiej jak byś skorzystał z layoutu jesli jeszcze nie korzystasz. tam wstawiasz partial z formularzem do logowania który wysyła akcje logowania do jakiegos modułu załóżmy login/index. Wstawiając taki partial w layout bedzie on widoczny na stronie każdego modułu. oczywiscie możesz ten parial chować po zalogowaniu użytkownika używając instrukcji warunkowych. Mam nadzieje ze pomogłem
blackroger
ok
destroyerr
Partial w ogóle nie, nigdy w takim zastosowaniu nie powinno się używać partialii! Dlatego, że nie ma gdzie stworzyć formularz i nie ma gdzie pobrać danych, aby wyświetlić w tym partialu. W komponencie można (i trzeba) to zrobić bez najmniejszych problemów.

Małe wytłumaczenie dla autora:
1. Wchodzisz na strone /artykuly czyli modul article, akcja: index. Ładujesz komponent z formularzem logowania, adres dla formularza jest stały - czyli akcja gdzie odbywa się logowanie
2. Wypełniasz formularz klikasz i wykonuje się akcja logowania. Jednym z elementów tej akcji może byc przekierowanie (redirect) na poprzednią stronę. Tę stronę można przesyłać albo w formularzu albo pobierać z referrer.
3. Po poprawnym zalogowaniu ładujesz komponent z profilem.
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.