Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Czy jest gdzieś dostępny przykład dot ZF
Forum PHP.pl > Forum > PHP > Frameworki
juzwa
zaczęły się u mnie problemy z ZF i to dość poważne

a, że ja mimo prób nie potrafię znaleźć jakiś konkretnych przykładów - np z logowaniem, obsługą sesji to mam pytanie - prośbę o jakieś linki czy coś w tym rodzaju

ja wiem, że jest manual, ale tam te przykłady dość ubogie są - np z tego co rozumiem to jak w kontrolerze wpisuje się noRouteAction to ZF ma z tego skorzystać, gdy nie znajdzie kontrolera tymczasem u mnie jest to błąd - wziąłem to w try catch ale - nie wiem jak obsłużyć przekierowanie

kolejna sprawa
gdy jest http://localhost/prj/index/ - to nie obsługuje mi stylów itp itd
gdy jest http://localhost/prj/index - to wszystko jest OK

też nie wiem o co chodzi bo niby z kontrolera w jednym i w drugim przypadku ciągnie z tego samego kontrolera i z tej samej akcji i nie wiem czemu ścieżki w jednym widoku pasują w innym nie - w ogóle nie wiem jak to obsłużyć takie coś i o co chodzi

i jeszcze parę mniejszych lub większych drobiazgów by się znalazła - jak na razie praca z ZF to męczarnia dla mnie jest - sporo czasu straconego
nrm
zajrzyj na blog http://wojciech.naruniec.info/pl/ tam chyba kiedyś było jakieś małe how-to/pierwsze kroki z ZF.
cyphelf
Cytat(juzwa @ 6.02.2007, 10:36:21 ) *
zaczęły się u mnie problemy z ZF i to dość poważne

a, że ja mimo prób nie potrafię znaleźć jakiś konkretnych przykładów - np z logowaniem, obsługą sesji to mam pytanie - prośbę o jakieś linki czy coś w tym rodzaju


Zobacz przykładowy sposób użycia autentykacji i uprawnień, może to Ci pomoże:
http://www.nabble.com/Zend_Acl---Zend_Auth...5728s16154.html

Cytat(juzwa @ 6.02.2007, 10:36:21 ) *
ja wiem, że jest manual, ale tam te przykłady dość ubogie są - np z tego co rozumiem to jak w kontrolerze wpisuje się noRouteAction to ZF ma z tego skorzystać, gdy nie znajdzie kontrolera tymczasem u mnie jest to błąd - wziąłem to w try catch ale - nie wiem jak obsłużyć przekierowanie


W wersji SVN i za kilka dni w wersji 0.8 powinno już być ok, spójrz tutaj:
http://framework.zend.com/issues/browse/ZF-775

Cytat(juzwa @ 6.02.2007, 10:36:21 ) *
kolejna sprawa
gdy jest http://localhost/prj/index/ - to nie obsługuje mi stylów itp itd
gdy jest http://localhost/prj/index - to wszystko jest OK


Spróbuj zmienić odnośnik do arkusza stylów na ścieżkę bezwzlędną, czyli np. zamiast "style.css" powinieneś mieć "/prj/style.css" (zwróć uwagę na slash na początku). Wtedy powinno być ok.
juzwa
dzięki za odpowiedź - do części doszedłem sam, częściowo pomogły mi przykłady które podałeś

np zamiast noRouteAction jest __calll (jakby ktoś szukał)

ale zostaje problem typu
if($sesja->zalogowany)
$frontController->dispatch();//idź dokąd chcecz
else
//MA BYĆ STRONA Z LOGOWANIEM

próbowałem szukałem siedziałem nad tym - porażka -

w przykładzie który podałeś jest fragment

->setControllerDirectory(array('default' => realpath('../application/controllers/default'),
admin' => realpath('../application/controllers/admin')))

czy w związku z tym mam zorganizować dwie ścieżki ?
bo coś próbowałem w tym kierunku ale też nie wyszło

chodzi mi o logikę - jak to się robi

normalnie jest tak
1 - sprawdź czy jest zalogowany
2 - jeśli nie skieruj go na stronę z logowaniem

realizacja tego jest np taka
if (!$_SESSION['log'])
header('location:index.php?akcja=logowanie');

zwyczajnie normalnie prosto i da się to wymyślić samemu

a przy zendzie - już nie wiem co robić - może logika obsługi tego jest inna - a ja się czepiłem "starej" formy i dlatego mam kłopoty - ale z drugiej strony - tak ja to sobie wyobrażam - skoro w "tradycyjnej" metodzie można było to zdarzenie obsłużyć dwiema linijkami kodu to tutaj chyba nie trzeba pisać osobnego podprogramu (czy jak to tam nazwać)
Sabistik
Wszystko zależy gdzie Ty to chcesz sprawdzać. Poczytaj o pluginach.

  1. <?php
  2. class plugins_login extends Zend_Controller_Plugin_Abstract
  3. {
  4.  public function preDispatch($request)
  5.  {
  6. if(!$sesja->zalogowany)
  7. {
  8. // header czy jakis redirect do akcji z logowaniem.
  9. }
  10.  }
  11. }
  12. ?>
juzwa
dzięki za odpowiedź - pomogła mi bardzo

ale i tak nie do końca

if(!$sesja->zalogowany)
{
// header czy jakis redirect do akcji z logowaniem.
exit;
}

nie wiem co wstawić w miejsce komentarza

1 - header odradzam bo to jest tak index.php się ładuje sprawdza plugin -> w pluginie ma, że ma przechodzić gdzieś tam -> przechodzi (oczywiście przez index.php) -> sprawdza, że nie jest zalogowany -> ma na to instrukcję że ma przechodzić gdzieś tam -> przechodzi -> w efekcie zapętla się i jest błąd

2 - redirect jest związany z Zend_Controller_Action więc raczej odpada (dotyczy to także metody _forward)
no chyba, że da się jej użyć na sposób o którym nie mam pojęcia na razie

3 - co zrobiłem - (oprócz 1 i 2)
zajrzałem do klasy obsługującej pluginy i znalazłem metodę

public function setRequest(Zend_Controller_Request_Abstract $request)
{
$this->_request = $request;
return $this;
}
wg mnie powinna utworzyć żądanie aby przekazać akcje do określonej metody określonego kontrolera
(podobna do tej jest setRedirect)

próbowałem
$this->_request='/';
$this->_redirect='/';
lub to samo ale z 'index'

no i porażka - nie wiem może trzeba utworzyć klasę dziedzicząca po Zend_Controller_Request_Abstract i coś w pluginie jakąś jej metodę wywołać - no już nie mam pomysłu jak to zrobić

ogólnie rzecz biorąc klasa ta nie jest skomplikowana - to jest z 10 metod - z jedną dwoma linijkami kodu, ale nie znalazłem tam sposobu na przypisanie jakieś do Zend_Controller_Front tego kontrolera którego chcę aby był wyświetlony


tak na zakończenie - chciałem coś porobić z ZF bo gdzieś przeczytałem, że jest prosty do nauczenia się i w obsłudze - ale na końcu trzeciego dnia gdzie nie mogę znaleźć rozwiązania czegoś co w tradycyjnym rozwiązaniu było banalne i robiło sie najwyżej w minutę to mnie trafia - przecież to nie jest nic wymyślnego, wg mnie to jest jedna z podstawowych funkcji i zero przykładów jak to zrobić, ani nawet opisu jak się to robi, jak się to robić powinno - albo ja jestem za głupi na tego ZF i nie potrafię tak prostej funkcjonalności obsłużyć
Sabistik
Jak dla mnie ZF to najprostszy fw jaki widziałem (:

Nie pamiętam jak to dokładnie szło ale chyba jakoś tak:
  1. <?php
  2. public function preDispatch($request)
  3. {
  4. $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
  5. if (!$session->zalogowany)
  6. {
  7. $request->setControllerName('login')
  8. ->setActionName($dispatcher->getDefaultAction())
  9. ->setDispatched(false);
  10. }
  11. }
  12. ?>


W kontrolerze login w defaultowej akcji robisz formularz logowania.
juzwa
  1. <?php
  2. public function preDispatch($request)
  3. {
  4. $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
  5. if (!$session->zalogowany)
  6. {
  7. $request->setControllerName('login')
  8. ->setActionName($dispatcher->getDefaultAction())
  9. ->setDispatched();//BEZ FALSE
  10. }
  11. }
  12. ?>


jeszcze jedna mała popraweczka do powyższego rozwiązania

teraz jest tak, że przed każdym wywołaniem kontrolera jest sprawdzane czy jest się zalogowanym - jeśli nie to kieruje do kontrolera login do akcji domyślnej (czy jak tam to sobie kto ustawi) - ale gdy ktoś nie jest zalogowany i się loguje i nawet jak poda poprawne dane to w procesie weryfikacji danych jest on dalej niezalogowany - no i jest problem ciągłego powracania do strony logowania bez względu na wszystko - bo cały czas jest się niezalogowanym i nie ma szansy aby stan ten zmienić - bo kierując kogoś do procesu weryfikacji danych jest on niezalogowany czyli trzeba go skierować do strony logowania

dlatego też przerobiłem to w następujący sposób:
1 - wykorzystałem zmienna która przechowuje nazwę ścieżki aplikacji
2 - sprawdzanie warunku czy przypadkiem akcja nie jest skierowana do kontrolera i metody weryfikującej dane - bo jeśli tak to trzeba dać szanse na zalogowanie, a jeśli nie to skierować do strony z logowaniem


  1. <?php
  2. public function preDispatch($request)
  3. {
  4. $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
  5. $appPath=Zend::registry('appPath');//1
  6. if (!$session->zalogowany)
  7. {
  8. if($request->getRequestUri()!=$appPath.'index/login')//2
  9.  {
  10.  $request->setControllerName('login')
  11.  ->setActionName($dispatcher->getDefaultAction())
  12. ->setDispatched();
  13.  }
  14. }
  15. }
  16. ?>


nie wiem czy jest to rozwiązanie optymalne, ładne, poprawne pod względem formalnym - ale najważniejsze, że działa - ale jakby ktoś miał coś innego do zaproponowania to chętnie bym zobaczył to inne rozwiązanie
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.