Kolejne rozczarowanie Zend Framework

03 lis 2009

Nowy projekt (a właściwie dwa) mają zostać oparte o Zend Framework. Niby wszystko pięknie – no bo mamy „zajefajny” framework, który zrobi niemal wszystko (brakuje tylko faktu, że kawy nie parzy ;) ).

Chcąc mieć projekty pięknie od początku wykonane z użyciem Zend_Tool i Zend_Application generuje strukturę dokumentu. Przy czym, w ZF 1.8 zaleca się trzymanie wszystkich ustawień w konfiguracyjnym pliku INI (w celu odchudzenia klasy Boostrap).
Wracając do projektu – od razu zakładam panel administracyjny – tworzę osobny moduł.
Moduł ten będzie obsługiwał kontrolę dostępu i autentyfikację opartą o bazę danych. Żeby nie powielać kodu dziesiątki razy chcę stworzyć plugin kontrolera, który sprawdzi czy a. user jest zalogowany; b. ma dostęp do zasobu. I tu zonk.

W dokumentacji jest napisane, że w pliku INI można podać listę pluginów:

plugins: array of front controller plugin class names. The resource will instantiate each class (with no constructor arguments) and then register the instance with the front controller.

W przykładzie wygląda to tak:

resources.frontController.plugins.foo = "My_Plugin_Foo"
resources.frontController.plugins.bar = "My_Plugin_Bar"

Niby wszystko jasne, tworzę dwie klasy dziedziczące po Zend_Controller_Plugin_Abstract… Teoretycznie powinienem mieć możliwość wywołania metody preDispatch(), która może sprawdzić czy użytkownik jest zalogowany i czy ma prawa do zasobu. Jeśli nie to, w zależności od sprawdzenia, albo przekierować go na formularz logowania, albo wyświetlić stronę z informacją o braku dostępu.
Teoretycznie – bo ten kod nie działa (błąd ładowania klasy, mimo że jest ona w include_path)!
Co więcej straciłem dziś 2 godziny na znalezienie „obejścia”. Obejście to nic innego jak stworzenie metody _initPlugins() w Bootstrap i po staremu dodanie pluginów do front kontrolera:

protected function _initPlugins()
{
    $front = $this->bootstrap('frontController');
    $front->registerPlugin(new My_Plugin_Foo());
}

Przy okazji przejrzałem dokładniej dokumentację ZF i takie oto wnioski przyszły mi do głowy:

  • ZF to straszna kobyła, która sama w sobie nie trzyma standardów – można to samo wykonać na 3 różne sposoby (framework chyba powinien narzucać jeden standard!?)
  • oficjalna dokumentacja jest nieaktualna
  • API tez nieaktualne (Zend_Version) pokazuje numer 1.9.3
  • jedyną pomocą są fora i bugtracker ZF

Do kolejnego razu! (oby można było powiedzieć coś in-plus…)

Komentarzy: 9

W dokumentacji „JEST NAPISANE” a nie w dokumentacji pisze ;) . Pozdrawiam. Bede wracal po wiecej wpisow o ZF.

felixd @ 04 lis 2009 0:23. #

a wystarczyło dodać namespace do autloader’a, w application.ini
autoloadernamespaces.my = „Myl”
i wszystko ładnie działa

milus @ 04 lis 2009 10:08. #

@felixd – dzieki juz poprawia, tekst byl pisany na szybko…

@milus – no wlasnie nie dzialalo z namespace’ami cos za bardzo :/

webit @ 04 lis 2009 10:49. #

hmm, aż sprawdziłem. wersja zf 1.8.1
mój config:
autoloadernamespaces.kamil = „Kamil”

includePaths.library = APPLICATION_PATH „/../library”
includePaths.models = APPLICATION_PATH „/models”

bootstrap.path = APPLICATION_PATH „/Bootstrap.php”
bootstrap.class = „Bootstrap”

resources.frontController.controllerDirectory = APPLICATION_PATH „/controllers”
resources.frontController.plugins.test = „Kamil_Controller_Plugin_Test”

no i plugin:
class Kamil_Controller_Plugin_Test extends Zend_Controller_Plugin_Abstract
{
public function preDispatch (Zend_Controller_Request_Abstract $request)
{
var_dump(„jestem tu i dziala”); die;
}
}

no i działa bez problemu

milus @ 04 lis 2009 12:53. #

Hm… Niestety ale przeważnie takie płytkie opinie padają z ust osób które nie rozumieją działania frameworka.

ZF @ 04 lis 2009 14:13. #

To ze nie „rozumie dzialania frameworka” to nie dokonca oznacza plytka opinie.
Od dawna sledze go i uzywam w razie potrzeby. Ale dopiero teraz widze jego niedociagniecia – braki w dokumentacji i api, nieaktualne przyklady, etc.

Oznacza to tez tyle ze sie troche zawiodlem na ZF.

webit @ 04 lis 2009 14:48. #

Niedociągnięcia ma każdy projekt. Uważam, że akurat dokumentacja jest bardzo dobra i można na jej bazie sporo się dowiedzieć i zrozumieć.
Żadna dokumentacja nie opisuje wszystkiego i na tyle dokładnie by zadowoliło każdego, a zwłaszcza w sytuacji kiedy osobie zainteresowanej się spieszy bo dany kod używa „w razie potrzeby”.

Rada, jeżeli mogę oczywiście, zdecyduj się na jeden framework i pisz w nim wszystko i non-stop. Wtedy dopiero będziesz mógł obiektywnie i kompetentnie pisać o jego wadach i niedociągnięciach. Na razie zwyczajnie frustrujesz się, że brakuje ci czasami wiedzy.

ZF dla mnie wymiata i czekam na kolejne releasy.
Btw. wg. roadmapy następny major ma mieć poprawioną dokumentacje. Może będzie lepiej, chociaż ja i tak uważam, że jest ok.

Pozdr
M

Mikee @ 04 lis 2009 16:51. #

Że tak się przypierdzielę, uwierzytelnianie, a nie „autentyfikację”, nie ma takiego słowa w języku polskim :D

A poważnie, to trzeba zacząć Cię subskrybować jako, że zaczynam przygody z ZF :)

Pozdrawiam Ciepło!

Andrzej @ 16 sty 2010 2:42. #

Zgodzę się za autorem wątku, dokumentacja Zenda jest do bani. Takiego „crapa” na oczy nie widziałem, na codzień korzystam z dokumentacji frameworków takich jak min. Spring, Struts2, Grails czy nawet zdarzyło się Ruby On Rails. Dobrą dokumentację naprawdę da się zrobić i tego o dokumentacji Zenda nie mogę powiedzieć.

wnuk @ 13 lis 2010 18:01. #

Skomentuj wpis

Pole wymagane.

Pole wymagane. Adres nie będzie publikowany!

Jeśli posiadasz :)

 


Switch to our mobile site