Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybór Frameworka.
Forum PHP.pl > Forum > PHP > Frameworki
Stron: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
michalg
Cytat(kukson @ 3.06.2009, 19:19:31 ) *
Witam co powiecie na porównanie FW na stronie http://talks.php.net/show/drupal08/29.


Wniosek jest jeden - do pisania aplikacji typu hello world nie warto używać frameworków. Pozatym IMHO taki benchmark niewiele mówi, bo przedstawia on sytuacje, w której framework jest wąskim gardłem. A w rzeczywistych sytuacjach dochodzą do tego jeszczcze czasy zapytań do bazy itp.
kukson
Cytat(michalg @ 3.06.2009, 19:49:51 ) *
Wniosek jest jeden - do pisania aplikacji typu hello world nie warto używać frameworków. Pozatym IMHO taki benchmark niewiele mówi, bo przedstawia on sytuacje, w której framework jest wąskim gardłem. A w rzeczywistych sytuacjach dochodzą do tego jeszczcze czasy zapytań do bazy itp.


Zgadzam sie ze html i php wypada najlepiej w tym tescie ;p, ale dziwi mnie duza roznica miedzy FW.
athabus
W tym różnicach nie ma nic dziwnego. Po prostu różne frameworki są tworzone do różnych rzeczy. Przykładowo Symfony jest robione raczej pod projekt minimum średnie. Nigdy nie będzie dobrze wypadało w testach hello world. Nawet pobieżne zapoznanie się z Symfony pokaże Ci jak wiele rzeczy tam masz "out of the box" - autoloader klas, kompleksowa obsługa bazy danych, wygodna konfiguracja, kompleksowa obsługa i walidacja formularzy i tak można wymieniać bez końca. Niestety wczytanie tego wszystkiego "kosztuje" i w aplikacji typu hello world się nigdy nie zwróci.
W prostych frameworkach musisz z reguły robić takie rzeczy sam - także ich narzuty zwiększają się wraz ze wzrostem złożoności projektu szybciej niż np. w Symfony, ale w prostszych aplikacja są po prostu szybsze.

Prawda jest taka, że nie ma frameworka do wszystkiego. Przykładowo ostatnio pisałem system, którego zadaniem jest tworzenie stron na podstawie pliku tekstowego. Jeden system obsługuje wiele małych stron - coś jak proste blogi z tagami, kategoriami etc. Frontend takiego przykładowego bloga jest baaardzo prosty. Po prostu pobiera wpisy z bazy i je wyświetla. Backend natomiast to już trochę więcej pracy - musi sparsować plik txt i zrobić z tego bloga + modyfikacja wszystkich stron z jednego panelu, edycja artykułu "rich text" + zarządzanie kategoriami etc.

W końcu zdecydowałem się na stworzenie backendu w symfony a frontendu w kohana. Backend był zaawansowany i skomplikowany, musiał zarządzać dość wieloma formularzami, dużo operacji na bazie - stąd Symfony. Frontend miał być po prostu szybki i prosty - tu Kohana nadała się doskonale - jest lekka, 1h studiowania dokumentacji i już mogłem w niej napisać prostą aplikację - tworzenie frontendu w symfony mijało by się z celem bo nigdy nie chodził by tak wydajnie jak kohana - dodam, że frontendy muszą być instalowane wielokrotnie więc także rozmiar Kohanej (~1mb) miał tu znaczenie.

Z kolei pisałem też dedykowany sklep z portalem - tutaj NIGDY nie zdecydował bym się na Kohaną. Pisanie w Symfony dużych aplikacji jest o niebo wygodniejsze. Dla mnie Symfony jest prawie idealna jeśli chodzi o pisanie średniej wielkości aplikacji. Po prostu w Symfony po wstępnej konfiguracji robisz tylko to, co robić powinien programista, a nie na przykład walidujesz ręcznie ciągle te same formularze, głowisz się jak dodać filtry czy wymyślasz sposoby na cachowanie danych.
phpion
Cytat(athabus @ 4.06.2009, 12:20:35 ) *
Z kolei pisałem też dedykowany sklep z portalem - tutaj NIGDY nie zdecydował bym się na Kohaną. Pisanie w Symfony dużych aplikacji jest o niebo wygodniejsze. Dla mnie Symfony jest prawie idealna jeśli chodzi o pisanie średniej wielkości aplikacji. Po prostu w Symfony po wstępnej konfiguracji robisz tylko to, co robić powinien programista, a nie na przykład walidujesz ręcznie ciągle te same formularze, głowisz się jak dodać filtry czy wymyślasz sposoby na cachowanie danych.

Mógłbyś podać jakieś konkretne argumenty? Ja osobiście jestem zwolennikiem Kohany i (nie wiem czy to do niej odnosisz) stwierdzenia:
Cytat
a nie na przykład walidujesz ręcznie ciągle te same formularze, głowisz się jak dodać filtry czy wymyślasz sposoby na cachowanie danych

są wg mnie totalnie chybione. Wszystkie wymienione przez Ciebie elementy w Kohanie są bajecznie proste (może aż zbyt proste i nie do końca "pro"). Walidacja formularzy (w tym tworzenie własnych walidatorów), filtry (zwykłe metody statyczne) czy cache'owanie danych to jest dosłownie chwila roboty. Niestety (przynajmniej dla mnie) w przypadku Symfony tak nie było. Może dla kogoś kto zna Symfony od podszewki nie jest to problem ale ja często miałem dylematy typu "jak działa ten walidator?".

Piszesz, że na Kohanej nigdy nie oparłbyś sklepu wraz z portalem - a ja właśnie tak zrobiłem. Coprawda jest to sam sklep internetowy, bez żadnego dodatkowego portalu, ale jednak ma sporo (głównie w adminie) funkcji. Przewidując przyszłość nie uśmiechałyby mi się (przykładowo) ciągłe przebudowy modelu w przypadku dodania/usunięcia jakiejś tam funkcjonalności. Pewnie masz w tej kwestii większe doświadczenie ale ja tylko raz miałem okazję pracować na Symfony w przypadku serwisu, który funkcjonował w sieci (dość spory i znany serwis) więc wszelkie zmiany, których musiałem dokonywać, sprawiały, że miałem pełne majty kału. Ponadto sprawa backendu: czy jesteś w stanie w 100% dostosować go do potrzeb klienta (stosując generatory)? Stworzyć takie formularze jakie są potrzebne (wiem, można używac partiali, komponentów), a nie takie jakie można stworzyć? Dla mnie właśnie takie ograniczenie stało się coraz bardziej wkurzające. Wolę mieć pełną kontrolę nad tym, co robię, a nie bazować na tym, co mogę zrobić.

Nie twierdzę, że Symfony jest do bani. Wręcz przeciwnie: jest to kawał genialnego kodu. Po prostu nie trafia idealnie w moje potrzeby przez co mam innego faworyta, którego będę bronił smile.gif
mike
Cytat(phpion @ 4.06.2009, 14:18:30 ) *
(...) wszelkie zmiany, których musiałem dokonywać, sprawiały, że miałem pełne majty kału.
A jaki to ma związek z symfony?
Cytat(phpion @ 4.06.2009, 14:18:30 ) *
Ponadto sprawa backendu: czy jesteś w stanie w 100% dostosować go do potrzeb klienta (stosując generatory)? Stworzyć takie formularze jakie są potrzebne (wiem, można używac partiali, komponentów), a nie takie jakie można stworzyć? Dla mnie właśnie takie ograniczenie stało się coraz bardziej wkurzające. Wolę mieć pełną kontrolę nad tym, co robię, a nie bazować na tym, co mogę zrobić.
Nie sądziłem, że jest zakaz pisania backendu samemu tongue.gif Przecież generatory można wykorzystać w części lub tylko do utworzenia szablonu rozwiązania. Potem kodować możesz samemu równie skutecznie.
Cytat(phpion @ 4.06.2009, 14:18:30 ) *
Nie twierdzę, że Symfony jest do bani. Wręcz przeciwnie: jest to kawał genialnego kodu. Po prostu nie trafia idealnie w moje potrzeby przez co mam innego faworyta, którego będę bronił smile.gif
Uszanuj to, że inne rozwiązanie nie trafia w cudzy gust. To że Ci się podoba Kohna nie znaczy że musisz przekonywać tych, którzy nie chcą być przekonani.
To się tyczy zwolenników dowolnego narzędzia.
LBO
Wiem, że to nie meritum twojego posta, ale:
wiesz, że te generatory to są opcjonalne? I jeżeli nie chcesz/nie umiesz się nimi posługiwać - nie musisz.
Sam się kiedyś o nie rozbiłem i nie tykałem Symfony przez ponad rok.

orasss, mimo wszystko

Agavi rządzi!

edit:

do @phpiona to było
phpion
Cytat(mike @ 4.06.2009, 14:45:44 ) *
A jaki to ma związek z symfony?

Ano taki, że w Symfony wiele rzeczy dzieje się automatycznie i nie zawsze ma się na wszystko wpływ.

Cytat(mike @ 4.06.2009, 14:45:44 ) *
Uszanuj to, że inne rozwiązanie nie trafia w cudzy gust. To że Ci się podoba Kohna nie znaczy że musisz przekonywać tych, którzy nie chcą być przekonani.
To się tyczy zwolenników dowolnego narzędzia.

A czy ja nie szanuję cudzych wyborów? No proszę Cię. Napisałem tylko swoje zdanie na dany temat. Poza tym: wychodząc z Twojego punktu widzenia to nie ma sensu wdawać się w jakiekolwiek rozmowy/wymiany argumentów. W takim razie po co ten wątek? Chyba właśnie po to aby poznać kilka zupełnie różnych opinii na temat różnych frameworków, prawda?

Cytat(LBO @ 4.06.2009, 14:48:56 ) *
wiesz, że te generatory to są opcjonalne? I jeżeli nie chcesz/nie umiesz się nimi posługiwać - nie musisz.

Tak, wiem. Również wiem, że wcale nie muszę używać Propela/Doctrine. Jeśli nie odpowiada mi mechanizm formularzy również mogę go olać. Ze wszystkiego zdaję sobie sprawę. Tyle tylko, że rezynując z tych elementów rezygnuje się równocześnie z tych elementów, które są główną siłą Symfony.
athabus
Phpion trochę źle mnie zrozumiałeś z moim postem - większa jego część nie odnosi się do Kohana. Uważam ten framework (chociaż znam go słabo) za bardzo przyjemny. Moim zdaniem jednak jest to framework idealnie nadający się do małych stron (co nie znaczy, że nie napiszesz w nim czegoś dużego, po prostu odbieram go w ten sposób). W Kohana pisze mi się dość przyjemnie.

Co do mojego stwierdzenia o tym, że w Kohanej bym nie pisałem większej aplikacji - np. dedykowanego sklepu opieram się przede wszystkim na tym, że w symfony zrobię to dużo szybciej, a jako że jestem bałaganiarzem to bardzo odpowiada mi to, że w Symfony jest taka poukładana struktura (niektórzy mówią, że sztywna).

Co do skomplikowania symfony to się trudno niezgodzić, że pierwszy projekt wymaga doczytania wielu rzeczy - nie jest tak jak w Kohanej, że dokumentacja jest tak mała, że można ją przyswoić w godzinę na tyle, aby czuć się komfortowo. Ale wynika to z tego faktu, że symfony ma być możliwie kompletnym frameworkiem, w którym user ma mieć możliwie dużo z pudełka.

Co do aktualizacji kodu etc, to nie wiem skąd ten kał ;-) Ja ciągle rozwijam projekty i dodaje funkcjonalności w sf i nie napotykam problemów - ot trzeba pamiętać, żeby wgrać pliki i wyczyścić cache... nic nadzwyczajnego.

Jeśli chodzi o wygodę generatora admina to:
- tak jak pisze mike nie ma obowiązku używania, to tylko jedno z narzędzi
- w 1.0 faktycznie był dość "cieżki" w przeróbkach, ale w obecnej wersji można już zrobić naprawdę prawie wszystko

Podobnie np. formularze - w symfon 1.2 to już jest osobne narzędzie, które wymaga chwili na poznanie (jest osobna książka do tego) ale w zamiana dostajesz najlepszą i najbardziej kompletną obsługę formularzy w php jaką kiedykolwiek widziałem.

Także reasumując jestem daleki od powiedzenia że Kohana jest gorsza od Symfony. Po prostu moim zdaniem jest to inna liga zastosowań. Nie pisałbym małych projektów w symfony bo to takie strzelanie z armaty do wróbla. Nie pisałbym dużych projektów w Kohana bo cenię swój czas i wiem, że w Symfony zrobię to znacznie lepiej i szybciej. Jeśli jednak Ty lubisz Kohana to nie widzę problemu w pisaniu w niej dużych projektów bo sam framework to tylko narzędzie i wszystko da się zrobić.
phpion
Cytat(athabus @ 4.06.2009, 15:27:54 ) *
Także reasumując jestem daleki od powiedzenia że Kohana jest gorsza od Symfony. Po prostu moim zdaniem jest to inna liga zastosowań.

W pełni się zgadzam. Tak samo nie można powiedzieć, że VW Passat jest gorszy od VW Transportera smile.gif
nieraczek
athabus:
"Co do aktualizacji kodu etc, to nie wiem skąd ten kał ;-)"

Myślę, że phpionowi chodziło o to, że jak chcemy dodać nową lub zmodyfikować istniejącą kolumnę w tabeli itp. w istniejącej już bazie danych z tabelami i danymi to trzeba dokonać migracji by nie tworzyć tabel na nowo i żeby dane nie zostały utracone i phpionowi chodziło pewnie o to, że to może się nie udać, coś złego może się wydarzyć podczas migracji itp., czy tak ? tongue.gif
athabus
questionmark.gif?
Nie za bardzo rozumiem ten argument... Przecież gdy chcesz coś zmienić w bazie to ZAWSZE musisz:
- wprowadzić zmiany w tabeli
- wprowadzić zmiany w warstwie modelu

Nie wiem w czym tu Symfony ma być gorsze od innego frameworka. Przecież w każdym innym frameworku trzeba postąpić tak samo. Bo chyba nie chodzi Ci o to, że musisz ponownie wywołać propel:build-all? Bo przecież nie musisz (a nawet nie możesz) - wystarczy zbudować od nowa model, a bazę poprawić "ręcznie". Wiele razy już zmieniałem tabele, dodawałem nowe do istniejącego projektu etc. Nigdy nie jest to przyjemna operacja bo trzeba na chwilę zablokować aplikację, ale nie widzę żadnej różnicy między Symfony a "niesymfony".
LBO
A ja chyba wiem o co chodzi.
W Kohanie modele buduje się samemu, dzięki temu wiesz dokładnie co, gdzie i jak. W Propelu/Doctrine już nie do końca (polegasz na zewnętrznym kodzie w dodatku molochu) i jest stres, że coś nie tak będzie.
Fakt, jak znasz Propela/Doctrine od podszewki to to się wydaje śmieszne, ale ww czynnik występuje i chyba bywa powszechny smile.gif

Ale po to wymyślono migracje... a te chyba są w Doctrine o ile pamiętam.
phpion
Cytat(LBO @ 4.06.2009, 20:32:20 ) *
A ja chyba wiem o co chodzi.
W Kohanie modele buduje się samemu, dzięki temu wiesz dokładnie co, gdzie i jak. W Propelu/Doctrine już nie do końca (polegasz na zewnętrznym kodzie w dodatku molochu) i jest stres, że coś nie tak będzie.

Dokładnie tak, o to mi chodziło. Pisząc model samemu orientuję się jak on wygląda i jakie są zależności. Natomiast w przypadku generowania kodu nie mam 100% pewności, że ingerując w dane miejsce nie naruszę innego. W Kohanie model można z powodzeniem zawrzeć w jednym pliku (nawet bez podziału na Klasa i KlasaPeer). Pracując w takiej sytuacji w jakiej ja pracowałem (brak pełnej lokalnej kopii, prace na funkcjonującym serwisie) wszelkie nanoszenie zmian łączyło się z niepewnością "czy wszystko jest ok".
boddah85
Mam nadzieję, że to odpowiedni topic snitch.gif

Czy aby zacząć naukę któregokolwiek z Frameworków należy znać bardzo dobrze OOP ? Mam za sobą napisanie kilku całkiem rozbudowanych aplikacji, ale pisałem dotąd strukturalnie. W podstawach obiektowości się odnajduję, ale raczej nic więcej.
W planach miałem naukę ZF, ale czy wobec tego ma to sens, czy lepiej dokształcić się w OOP ? snitch.gif

Pozdrawiam
pgrzelka
Cytat(boddah85 @ 24.06.2009, 00:04:02 ) *
Czy aby zacząć naukę któregokolwiek z Frameworków należy znać bardzo dobrze OOP ? Mam za sobą napisanie kilku całkiem rozbudowanych aplikacji, ale pisałem dotąd strukturalnie. W podstawach obiektowości się odnajduję, ale raczej nic więcej.
W planach miałem naukę ZF, ale czy wobec tego ma to sens, czy lepiej dokształcić się w OOP ? snitch.gif


wydaje mi się że wystarczy jak same podstawy będziesz znał, reszty nauczysz się ucząc się frameworka...
Pr0100
Cytat
W planach miałem naukę ZF, ale czy wobec tego ma to sens, czy lepiej dokształcić się w OOP ?


radze się dokształcić albo wybrać prostszego frameworka takiego jak np. CodeIgniter czy Kohana. Zresztą zerknij na dokumentacje http://framework.zend.com/manual/en/ i sprawdź ile rozumiesz smile.gif
Kabraxis
Ostatnio dojrzałem do myśli aby zacząć używać frameworka. Chociaż nie do końca jestem zdecydowany ponieważ nie mogę znaleźć niczego pod moje potrzeby ale może źle szukam. Może ktoś mi coś doradzi.

- Przede wszystkim framework musi mieć czytelną i dobrą dokumentację. Po to mam go używać aby zaoszczędzić czas, a nie aby go nadkładać dla satysfakcji używania frameworka. Za kilka lat i tak będę używał czegoś innego.
- Podstawowe klasy takie jak wysyłanie emaili, obsługa obrazków itd. ale wykonane na prawdę profesjonalnie i solidnie. Za to bez zbędnych bajerów, których i tak nigdy nie użyję, a zaśmiecają całość. Jeżeli jest klasa do e-maili to obsługuje wszystko, łącznie z takimi opcjami jak hurtowe wysyłanie e-maili z załącznikami ale w taki sposób, że nie tworzy setek kopii jednego pliku dla każdego odbiorcy tylko rozwiązuje to optymalnie.
- Obsługa wyświetlania stron i komunikatów w wielu językach. itd. itp. Wszystkie podstawy używane przy tworzeniu stron. Natomiast bez zbędnych wodotrysków bo je i tak trzeba napisać samemu.

Mam nadzieję, że w miarę zrozumiale napisałem swoją ideę frameworka i znajdzie się coś takiego.
kwiateusz
kohana chyba najlepiej pasuje zwłąszcza z ta dokumentacją winksmiley.jpg na poczatek powinno Ci wystarczyć
em1X
standardowo mogę polecić Yii smile.gif
athabus
A mi się wydaje, że Kabraxis szuka zbioru klas a nie frameworka ;-)
To co napisałeś to tak na prawdę w każdym frameworku dostaniesz, bo w każdym frameworku możesz używać klas zewnętrznych. Nie napisałeś natomiast nic o wymaganiach co do samego frameworka, do rodzaju aplikacji jakich chcesz w nim tworzyć, do sposobu wykorzystania bazy danych etc itd. Same klasy we frameworku to rzecz drugorzędna, bo nawet jeśli nie odpowiada Ci dana klasa np. do wysyłania maili w frameworku to po prostu używasz innej. Framework to nie to samo co zbiór klas.
Kabraxis
Obawiam się, że athabus ma rację. Zawsze postrzegałem frameworki jako zbiory klas mające na celu ułatwiać życie. Pisząc poprzedniego posta tak na prawdę miałem w głowie zbiór klas, z których mogę korzystać. Wyszło na to, że chyba nie do końca rozumiem ideę frameworka heh.

Odpowiadając na pytanie co chcę w nim tworzyć.
Właściwie tylko i wyłącznie skrypty komercyjne takie jak:
- sklepy
- system magazynowy
- system fakturowania
- inne komercyjne takie jak np. serwis ogłoszeniowy, program partnerski itd.

Podsumowując wszystko dla zastosowań komercyjnych.
batman
~Kabraxis
W zasadzie każdy framework by pasował do Twoich potrzeb (oczywiście mowa o aplikacjach).
Jeśli potrzebujesz zbioru klas, które potrafią zrobić wszystko, to polecam Zend Famework, który takim zbiorem właśnie jest. Oprócz tego, że posiada masę funkcjonalności, to można jeszcze go używać jak każdego innego frameworka opartego o MVC.
viking
Wspomniałeś o tłumaczeniach a tutaj ZF nie ma konkurencji. Przetłumaczenie strony to kilka opcji (zobacz obsługiwane adaptery) i z automatu działa na choćby formularzach, możesz nawet prostą regułką URLe przetłumaczyć.
athabus
Kabraxis prawda jest taka, jak mówi Batman - tj. każdy framework nada się do tego typu zadań. Każdy będzie ci proponował to co lubi (ja też tak zrobie :-))

Ogólnie jeśli chodzi o dobre klasy, to polecam Zenda. Bardzo fajne narzędzia dla każdego programisty. Nie polecam jednak stosowania tego jako frameworka. Zend (o czym było już wiele w tym temacie pisane) - to jest bardziej narzędzie na którym możesz zbudować dostosowany pod swoje potrzeby framework - jeśli nie masz doświadczenia w pracy z frameworkami to się po prostu pogubisz. Sam zaczynałem od tego frameworka i potrzebowałem dużo czasu, żeby coś z tego wykrzesać a i tak z perspektywy patrząc to udało mi się osiągnąć spory śmietnik ;-). Podkreślę, że wina leżała po mojej stronie a nie po stronie frameworka - ot po prostu zabrakło wiedzy co i jak należy robić.

Na twoim miejscu zdecydowałbym się na Kohana lub Symfony. Kohana jest proste (czasami do bólu) i świetnie nadaje się do małych i średnich aplikacji - podstawy można opanować w 1 dzień. Dla niektórych (dla mnie akurat nie) jest też plusem fakt, że jest to bardzo luźny framework - na narzuca tylu ograniczeń co inne, większe rozwiązania.

Symfony to już jak to się ładnie określa rozwiązanie typu enterprise, wymaga sporo nakładu czasu na naukę i praktykę, ale daje dużo w zamian. W Symfony aplikację tworzysz wielokrotnie szybciej niż w gołym php i (w mojej opinii) 2-3 krotnie szybciej niż w Kohana.
Prawda jest jednak taka, że jakikolwiek framework nie wybierzesz na początku będziesz zadowolony.

Jeszcze raz podkreślę, że samych klas (np. Zenda) możesz używać w każdym frameworku. Framework bardziej ma wspierać takie rzeczy jak przepływ akcji, routing, separację warstw, tworzenie widoków, obsługiwanie/filtrowanie żądań, cachowanie etc - klasy to rzecz wtórna. W przypadku np. Symfony jest takie często powtarzane powiedzenie żeby "nie wynajdować koła od nowa" - autorzy czerpią z innych projektów czyniąc je częścią swojego frameworka - np. nie tworzą własnego ORM'a tylko używają Propela/Doctrine, nie tworzą własnych bibliotek Javascriptowych tylko używają uznanych projektów itd.

Co do wyboru samego frameworka, to przeczytaj cały wątek, odfiltruj flamewar i wybierz coś dla siebie.
Kabraxis
Panowie, dziękuję za wyczerpujące odpowiedzi. Dokładnie o takie informacje mi chodziło.
sever3d
Na początek wybierz CodeIgniter. Nauczysz się sporo. Przynajmniej podstaw MVC.
Ja używałem juz CakePHP i od niego zaczynałem. Narazie stawiam na CI.
LBO
Cytat(sever3d @ 4.10.2009, 16:51:08 ) *
Na początek wybierz CodeIgniter. Nauczysz się sporo. Przynajmniej podstaw MVC.
Ja używałem juz CakePHP i od niego zaczynałem. Narazie stawiam na CI.


Przecież te dwa frameworki to dinozaury. Czego potencjalnie można się z nich nauczyć?
Od dawna stawiałem na nowoczesne rozwiązania (Symfony, Agavi, Propel) i cieszę się, po przeglądnięciu źródeł Cake'a i CI, że tak się potoczyło.
wiewiorek
Ja tylko dodam, ze jak przeglądałem Zend frameworka to w stosunku do Symfony, zend jest strasznie zacofany.
kamilus
Ostatnio postanowiłem przepisać jeden ze swoich serwisów.
Dotąd nie korzystałem z żadnych gotowych frameworków. W PHP siedzę od czasu wersji 3.0 i nabywana wiedza była rozwijana stopniowo wraz z rozwojem języka.
Nie czuję jakiejś wielkiej potrzeby wykorzystywania frameworka do moich projektów, ale...
1. wiele firm w ofertach współpracy wymaga znajomości ZF lub Symfony
2. obecnie zaciąganie kogokolwiek do pracy to uczenie go swojego własnego standardu, wypracowanego przez lata (który nie jest zbyt zgodny z tym, do czego przyzwyczaili się studenci związani chociażby z ASP.NET), frameworki zaś są jako tako znane ludziom szukającym pracy na stanowisku programisty PHP

W związku z powyższymi faktami muszę podjąć decyzję czy odnowić serwis (dość spory portal, łącznie z forum i społecznościówką) według własnego stylu programowania, czy też postawić na, któryś z frameworków. Tutaj pytanie - który? Wybór tylko pomiędzy ZF i Symfony - jeśli uczyć się czegoś nowego, to tego co przyda się w życiu zawodowym.
Jak działa tandem ZF + ZendStudio + ionCube (jakoś nie podoba mi się licencja ZendGuard'a)?
Termin jaki sobie postanowiłem na odnowienie projektu (system artykułów, galeria zdjęć, komentarze, streaming video, zalążek forum dyskusyjnego, konto użytkownika) to 3 tygodnie. W późniejszym terminie i w ramach wolnego czasu dalszy rozwój serwisu.

Póki co liznąłem przez szybę ZF przy okazji testowania Studio i...
1. czeka mnie sporo nauki - o ile z OOP problemów nie mam, o tyle ZF wymusza swój własny styl pisania i struktury plików
2. Czy warto przy tak ograniczonym terminie zasiadać do ZF i ewentualnie okroić wstępną funkcjonalność, czy też lepiej napisać po staremu, a któryś z frameworków poznawać na spokojnie?
3. System template'ów - ten w ZF mnie przeraża - pliki CSS i HTML przygotowują w firmie graficy i szkolić ich z podstaw PHP... strach się bać - czy ciężko jest zastosować własny? Mam takowy, bardzo prosty - zbliżony do systemu stosowanego w phpBB2.
4. zapytania SQL... Trochę przeraża mnie wizja budowania prostych zapytań poprzez metody frameworka - czy to naprawdę jest aż tak efektywne? Jak dla przykładu zbudować wówczas takowe zapytanie:

Kod
SELECT u.imie, u.nazwisko, u.email, p.czas, c.komentarz, f.nazwa FROM comments c, artykuly p, users u, zwz_us_fi z, zwz_com_art zc WHERE p.tytul LIKE '%alabala%' AND zc.artykul=p.id AND z.user=c.user AND f.id=z.firma AND u.id=c.user


Takie wyssane z palca, gdyż projekt nowej bazy nie jest jeszcze do końca przemyślany (ale będzie wiele relacji n...n).
5. Czy ewentualna migracja elementów wprost ze starego systemu jest w miarę bezbolesna, czy też nie obejdzie się od przepisania na nowo (wiele elementów pochodzi jeszcze z czasów przed OOP i php5)?
athabus
@kamilus - przez 3 tygodnie to się możesz frameworka nauczyć, ale raczej nie napiszesz w nim dobrej aplikacji. Jeśli masz taki limit czasowy to ewentualnie możesz użyć prostego frameworka typu Kohana. ZF/Symfony to dość skomplikowane frameworki - ich poznanie zajmuje sporo czasu i trzeba nauczyć się korzystać z nowych opcji.

Co do SQL to nie ma konieczności korzystania z wbudowanych rozwiązań typu Propel etc, ale jest to bardzo wygodne zwłaszcza przy prostych zapytaniach. Te bardziej skomplikowane/wymagające optymalizacji z reguły robi się ręcznie na poziomie SQL.

Ogólnie jeśli miałbym coś doradzać to sugerowałbym Symfony. Zend daje większą dowolność, co jest teoretycznie plusem, ale przez ten brak standardów w pierwszych projektach wychodzi wielki chaos. Symfony wymaga dość dużego przestawienia się na nowe rozwiązania, ale posiada w miarę zunifikowany system kodowania, więc łatwiej:
a) od razu pisać w miarę dobry kod
cool.gif włączyć nową osobę do projektu

Zend jest bardzo fajny frameworkiem, ale dowolność sprawia że każdy koduje w nim inaczej. Jest to plus i minus. W Twoim przypadku, jeśli ma to być pierwszy framework to raczej będzie to minus, zwłaszcza ze masz ograniczenia czasowe.

Powiem jednak jeszcze raz, że jeśli termin 3 tygodni jest sztywny to raczej nie napiszesz tego dobrze w żadnym z tych frameworków bo różnica w stosunku do "ręcznego" pisania jest bardzo duża i trzeba poznać wiele nowych mechanizmów. Teoretycznie opanujesz je w kilka dni, ale zastosowanie praktyczne wymaga już trochę praktyki więc warto wypróbować to na jakąś mniejszą skalę.
dr4ko
Również bym optował za Symfony. Jak się zna symfony to prosty serwis/aplikację można zrobić w tydzień ale w 3 tygodnie nie nauczysz się żadnego frameworka nie mówiąc już o przepisaniu serwisu.
wiewiorek
W Zendzie mamy:
- beznadziejną dokumentację, brak porządnego tutoriala przez co przez kilka dni mordowałem, pytałem i szukałem jak włączyć layout bo nigdzie nie napisali

- by zrobić 1 model trzeba wg ich mini tutoriala: http://framework.zend.com/docs/quickstart/...-database-table zrobić tak:
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3. protected function _initAutoload()
  4. {
  5. $autoloader = new Zend_Application_Module_Autoloader(array(
  6. 'namespace' => 'Default',
  7. 'basePath' => dirname(__FILE__),
  8. ));
  9. return $autoloader;
  10. }
  11.  
  12. protected function _initDoctype()
  13. {
  14. $this->bootstrap('view');
  15. $view = $this->getResource('view');
  16. $view->doctype('XHTML1_STRICT');
  17. }
  18. }
  19.  
  20. //----------------------------------
  21.  
  22. ; application/configs/application.ini
  23.  
  24. ; Add these lines to the appropriate sections:
  25. [production]
  26. resources.db.adapter = "PDO_SQLITE"
  27. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook.db"
  28.  
  29. [testing : production]
  30. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-testing.db"
  31.  
  32. [development : production]
  33. resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-dev.db"
  34.  
  35. //-----------------------------------
  36.  
  37. //stworzyc katalog
  38.  
  39. //-----------------------------------
  40.  
  41. <?php
  42. // scripts/load.sqlite.php
  43.  
  44. /**
  45.  * Script for creating and loading database
  46.  */
  47.  
  48. // Initialize the application path and autoloading
  49. defined('APPLICATION_PATH')
  50. || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
  51. set_include_path(implode(PATH_SEPARATOR, array(
  52. APPLICATION_PATH . '/../library',
  53. )));
  54. require_once 'Zend/Loader/Autoloader.php';
  55. Zend_Loader_Autoloader::getInstance();
  56.  
  57. // Define some CLI options
  58. $getopt = new Zend_Console_Getopt(array(
  59. 'withdata|w' => 'Load database with sample data',
  60. 'env|e-s' => 'Application environment for which to create database (defaults to development)',
  61. 'help|h' => 'Help -- usage message',
  62. ));
  63. try {
  64. $getopt->parse();
  65. } catch (Zend_Console_Getopt_Exception $e) {
  66. // Bad options passed: report usage
  67. echo $e->getUsageMessage();
  68. return false;
  69. }
  70.  
  71. // If help requested, report usage message
  72. if ($getopt->getOption('h')) {
  73. echo $getopt->getUsageMessage();
  74. return true;
  75. }
  76.  
  77. // Initialize values based on presence or absence of CLI options
  78. $withData = $getopt->getOption('w');
  79. $env = $getopt->getOption('e');
  80. defined('APPLICATION_ENV')
  81. || define('APPLICATION_ENV', (null === $env) ? 'development' : $env);
  82.  
  83. // Initialize Zend_Application
  84. $application = new Zend_Application(
  85. APPLICATION_ENV,
  86. APPLICATION_PATH . '/configs/application.ini'
  87. );
  88.  
  89. // Initialize and retrieve DB resource
  90. $bootstrap = $application->getBootstrap();
  91. $bootstrap->bootstrap('db');
  92. $dbAdapter = $bootstrap->getResource('db');
  93.  
  94. // let the user know whats going on (we are actually creating a
  95. // database here)
  96. if ('testing' != APPLICATION_ENV) {
  97. echo 'Writing Database Guestbook in (control-c to cancel): ' . PHP_EOL;
  98. for ($x = 5; $x > 0; $x--) {
  99. echo $x . "\r"; sleep(1);
  100. }
  101. }
  102.  
  103. // Check to see if we have a database file already
  104. $options = $bootstrap->getOption('resources');
  105. $dbFile = $options['db']['params']['dbname'];
  106. if (file_exists($dbFile)) {
  107. unlink($dbFile);
  108. }
  109.  
  110. // this block executes the actual statements that were loaded from
  111. // the schema file.
  112. try {
  113. $schemaSql = file_get_contents(dirname(__FILE__) . '/schema.sqlite.sql');
  114. // use the connection directly to load sql in batches
  115. $dbAdapter->getConnection()->exec($schemaSql);
  116. chmod($dbFile, 0666);
  117.  
  118. if ('testing' != APPLICATION_ENV) {
  119. echo PHP_EOL;
  120. echo 'Database Created';
  121. echo PHP_EOL;
  122. }
  123.  
  124. if ($withData) {
  125. $dataSql = file_get_contents(dirname(__FILE__) . '/data.sqlite.sql');
  126. // use the connection directly to load sql in batches
  127. $dbAdapter->getConnection()->exec($dataSql);
  128. if ('testing' != APPLICATION_ENV) {
  129. echo 'Data Loaded.';
  130. echo PHP_EOL;
  131. }
  132. }
  133.  
  134. } catch (Exception $e) {
  135. echo 'AN ERROR HAS OCCURED:' . PHP_EOL;
  136. echo $e->getMessage() . PHP_EOL;
  137. return false;
  138. }
  139.  
  140. // generally speaking, this script will be run from the command line
  141. return true;
  142.  
  143.  
  144. //--------------------------------------
  145.  
  146. //znowu stworzyc katalog
  147.  
  148. //------------------------------------
  149.  
  150. class Default_Model_GuestbookMapper
  151. {
  152. protected $_dbTable;
  153.  
  154. public function setDbTable($dbTable)
  155. {
  156. if (is_string($dbTable)) {
  157. $dbTable = new $dbTable();
  158. }
  159. if (!$dbTable instanceof Zend_Db_Table_Abstract) {
  160. throw new Exception('Invalid table data gateway provided');
  161. }
  162. $this->_dbTable = $dbTable;
  163. return $this;
  164. }
  165.  
  166. public function getDbTable()
  167. {
  168. if (null === $this->_dbTable) {
  169. $this->setDbTable('Default_Model_DbTable_Guestbook');
  170. }
  171. return $this->_dbTable;
  172. }
  173.  
  174. public function save(Default_Model_Guestbook $guestbook)
  175. {
  176. $data = array(
  177. 'email' => $guestbook->getEmail(),
  178. 'comment' => $guestbook->getComment(),
  179. 'created' => date('Y-m-d H:i:s'),
  180. );
  181.  
  182. if (null === ($id = $guestbook->getId())) {
  183. unset($data['id']);
  184. $this->getDbTable()->insert($data);
  185. } else {
  186. $this->getDbTable()->update($data, array('id = ?' => $id));
  187. }
  188. }
  189.  
  190. public function find($id, Default_Model_Guestbook $guestbook)
  191. {
  192. $result = $this->getDbTable()->find($id);
  193. if (0 == count($result)) {
  194. return;
  195. }
  196. $row = $result->current();
  197. $guestbook->setId($row->id)
  198. ->setEmail($row->email)
  199. ->setComment($row->comment)
  200. ->setCreated($row->created);
  201. }
  202.  
  203. public function fetchAll()
  204. {
  205. $resultSet = $this->getDbTable()->fetchAll();
  206. $entries = array();
  207. foreach ($resultSet as $row) {
  208. $entry = new Default_Model_Guestbook();
  209. $entry->setId($row->id)
  210. ->setEmail($row->email)
  211. ->setComment($row->comment)
  212. ->setCreated($row->created)
  213. ->setMapper($this);
  214. $entries[] = $entry;
  215. }
  216. return $entries;
  217. }
  218. }
  219.  
  220. //---------------------------------------
  221.  
  222. //itd. !! to nie koniec !! kodu jest znacznie wiecej !!
  223.  


Tyle roboty dla jednego modelu questionmark.gif exclamation.gif Nie wiem jak Wy, ale ja i tak większości z tego nie rozumiem co tu się dzieje, w Symfony nie było tyle roboty.
A to nie jedyne wady ZF, ale z powodu tego jednego modelu już wyczerpałem limit znaków przeznaczony na jednego posta i więcej wad wymienić nie mogę tongue.gif
batman
~wiewiorek bzdury wypisujesz.
Cytat
- beznadziejną dokumentację, brak porządnego tutoriala przez co przez kilka dni mordowałem, pytałem i szukałem jak włączyć layout bo nigdzie nie napisali
Fakt. Dokumentacja nie należy do najlepszych. Jeśli szukasz czegoś więcej musisz mocno pogrzebać, by to znaleźć. Ale z tym layoutem to przesadziłeś. Przecież od tego masz Quick start (mini tutorial, jak to określiłeś).

A ten kod, który wkleiłeś to:
- index.php - punkt wejścia do aplikacji.
- bootstrap - klasa odpowiadająca za aplikację
- application.ini - plik konfiguracyjny
- skrypt pomocniczy, który stworzy bazę danych i uzupełni ją danymi
- właściwy model.
A ten tekst, że kodu jest znacznie więcej, to zapomniałeś o kontrolerze, widoku i dwóch pozostałych klasach modelu.

To co napisałeś to kod wymagany do stworzenia projektu, a nie samego modelu. To, że model został omówiony jako ostatni, nie oznacza, że musisz wykonać wszystkie kroki w celu jego napisania.

Pokaż mi frameworka, w którym działa model bez konfiguracji czy czegoś tak zbędnego jak index.php. Jedyne o co proszę, to rzeczowe argumenty.
wiewiorek
Źle napisałem, miałem poprawić, ale zapomniałem - chodziło mi o uprawnienia - Zend_Acl, przez kilka dni szukałem co i w jakim pliku dodać żeby dostęp do danej strony miała osoba tylko o wysokich uprawnieniach, w symfony wystarczyłoby zrobić:
  1. is_secure: on
  2. credentials: [wysokie]


i tyle, w końcu się poddałem i odpuściłem sobie Zenda. W Zendzie nieustannie trzeba dodawać kod, którego często nie rozumiem do plików: index.php, Bootstrap.php i application.ini - to mnie najbardziej wkurza. W Symfony nic takiego nie musiałem robić, a w Zendzie - non stop, przy każdej nowej funkcjonalnosci coś w nich trzeba dodać - to coś włączyć, to do czegoś ustawić ścieżkę itd. itp. - i żeby chociaż w jednym pliku albo żeby konkretnie napisali co i w którym pliku, a to nie, nic nie napiszą.


Przy użyciu konsoli w porównaniu do Symfony też wiele zrobić się nie da. Mogli chociaż zrobić, że jak chce skorzystać, np. z Zend_Acl to wydaję w konsoli polecenie i dodaje mi do tych 3. plików co tam trzeba, ale niestety takiego rozwiązania brak.
phpion
@wiewiorek:
Nie możesz negować ZF tylko dlatego, że nie dawałeś sobie z nim rady. Przez kilka dni szukałeś jak ugryźć ACL? No bez jaj - przecież w dokumentacji jest to ładnie napisane... Porównujesz ACL do ustawiania uprawnień w Symfony poprzez YML - pamiętaj tylko, że jest to pewien sposób zapisu konfiga. Dokładnie ten sam efekt mógłbyś uzyskać w ZF.

PS: dla jasności - nie używam ZF ani Symfony.
wiewiorek
phpion w dokumentacji a i owszem jest opisane użycie Zend_Acl - UŻYCIE, nie ma natomiast co i do jakiego pliku dodać żeby Zend_Acl uaktywnić.
-=Peter=-
@wiewiorek - tak ZF ma słabą dokumentację... Brak słów. Dokumentacja ZF wg mnie jest bardzo dobra, znacznie lepsza i obszerniejsza niż symfony (jeśli już porównujesz). Chociaż, poprzez tą obszerność, niekiedy wyszukanie prostej informacji zajmuje sporo czasu.

Zend jako tako nie oferuje nam gotowych klas modelu, jednak oferuje klasy na których bazie możesz sobie model napisać. Możesz również wykorzystać jakiegoś ORMa (Propel, Doctrine) tak jak to jest w symfony.

Cytat
W Zendzie nieustannie trzeba dodawać kod, którego często nie rozumiem do plików: index.php, Bootstrap.php i application.ini - to mnie najbardziej wkurza

To fajnie, że wkurzają cie rzeczy których nie rozumiesz. Pewnie chodzi ci o to, że aby dodać np. połączenie z bazą danych (czy jakiś inny "zasób" wg nazewnictwa zf) trzeba zainicjować w bootstrapie adapter bazy danych oraz ustawić dane do bazy w pliku konfiguracyjnym (co nie jest konieczne, bo możesz na sztywno w bootstrapie to trzymać tongue.gif). No faktycznie, jest to nieziemsko skomplikowane i nielogiczne... Ciężko się w tym połapać, zwłaszcza że ZF ma tak marną dokumentację.
batman
Cytat(wiewiorek @ 8.10.2009, 22:07:57 ) *
phpion w dokumentacji a i owszem jest opisane użycie Zend_Acl - UŻYCIE, nie ma natomiast co i do jakiego pliku dodać żeby Zend_Acl uaktywnić.

Ehh. Kiedyś oprócz umiejętności czytania, w cenie była umiejętność myślenia.

Jak już nie raz zostało to napisane, ZF jest zbiorem klas, z których możesz sobie napisać frameworka. Dokumentacja opisuje tylko poszczególne komponenty, a to jak je ze sobą połączysz, zależy tylko od Ciebie. Oczywiście są standardy tworzenia projektów w oparciu o ZF, ale nic nie stoi na przeszkodzie, by wyjąć np Zend_Form i użyć go z aplikacji niezależnej od ZF.

Jeśli wymagasz od frameworka dokładnych wytycznych co i jak masz napisać, a dokumentacja ma być zestawem gotowych przepisów na blog/forum/sklep/itd, to ZF nie jest dla Ciebie.
athabus
Z Zendem jest niestety ten problem, że reklamują go jako frameworka. Ktoś kto chce zacząć przygodę z frameworkami zazwyczaj wybierze właśnie Zenda bo w końcu tworzą go ludzie od php... i niestety w większości przypadków się rozczaruje.
Ja niestety zrobiłem kiedyś ten błąd. Aplikację jaką napisałem w oparciu można nazwać koszmarkiem ;-) - najlepsze jest to, że wtedy nawet nie wiedziałem, że to koszmarek i byłem z siebie bardzo dumny. Teraz gdy już mam pojęcia jak funkcjonują frameworki zrobiłbym to znacznie lepiej.

Co do dokumentacji to się nie wypowiadam, bo ja bawiłem się na etapie 0.7 więc trudno było oczekiwać dobrej dokumentacji - wtedy były opisane poszczególne klasy - nikt nie wspominał o tym jak używać ich jako całości. Jeśli jest tak nadal, to współczuję, bo nie jest to doby układ dla początkującego. Zdecydowanie dobre podejście do dokumentacji ma Symfony - tj. książka wchodząca w szczegóły każdego modułu + tutorial dla początkujących robiący taki przekrój przez wszystkie etapy tworzenia aplikacji. Dzięki temu osoba ma możliwość zapoznania się z istotą frameworka i później wie czego szukać w manualu.

Także rozumiem frustracje Wiewióra bo pare lat temu przeżywałem to samo - no może nie na taką skalę. Poruszałem się trochę jak dziecko we mgle. Dokumentacja techniczna bez "narracji" jak to wszystko połączyć jest bardzo denerwująca.

Trzeba zrozumieć podstawową rzecz - Zend to nie narzędzie dla osób nie znających frameworków. Zaczynając od tego frameworka można sobie wyrządzić dużo krzywdy nie zdając sobie nawet z tego sprawy, że robimy coś źle/nieoptymalnie. Nie zmienia to jednak faktu, że Zend to kawałem przyzwoitego kodu. Sam z niego korzystam, ale tylko jako biblioteki do Symfony.
wiewiorek
Peter, ja robiłem plugina Zend_Acl,
w pliku bootstrap dawałem:
  1. public function _initAclPlugin()
  2. {
  3. $acl = new My_Acl();
  4.  
  5. $fc->registerPlugin(new My_Plugin_Acl($acl));
  6. }
  7.  


w applicatio.ini:
  1. autoloadernamespaces.0 = "Zend_"
  2. autoloadernamespaces.1 = "My_"


w index.php:
  1. set_include_path(implode(PATH_SEPARATOR, array(
  2. realpath(APPLICATION_PATH . '/../library'),
  3. realpath(APPLICATION_PATH . '/plugins'),
  4. )));


i inne cuda i wciąż ten Zend_Acl mi nie działał.

No jak Wy lubicie zabawy z modułami i tyle kombinacji by włączyć coś tak podstawowego jak moduł odpowiedzialny za przywileje, zamiast korzystać z pełnowartościowych frameworków i skupić się na programowaniu to wasza sprawa. Dla mnie nowoczesnymi frameworkami są Symfony i pochodzący z innej bajki ASP.NET - można skupić się na programowaniu, wszystko inne można dodać albo z konsoli, albo z Visual Studio.

Albo kolejna wada - ten framework nie ułatwa podstawowych rzeczy. Przykład - logowanie - w Zendzie to byłoby coś w tym stylu:
  1. $uzytkownicy = new Model_DbTable_Uzytkownicy();
  2. $form = new Form_Logowanie();
  3. $this->view->form = $form;
  4.  
  5. if($this->getRequest()->isPost())
  6. {
  7. if($form->isValid($_POST))
  8. {
  9. $data = $form->getValues();
  10.  
  11. $auth = Zend_Auth::getInstance();
  12. $authAdapter = new Zend_Auth_Adapter_DbTable($uzytkownicy->getAdapter(),'uzytkownicy', 'login', 'haslo');
  13.  
  14. $authAdapter->setIdentity($data['login'])
  15. ->setCredential($data['haslo']);
  16.  
  17. $result = $auth->authenticate($authAdapter);
  18. if($result->isValid())
  19. {
  20. $storage = $auth->getStorage();
  21. $storage->write($authAdapter->getResultRowObject());
  22. $storage->write($authAdapter->getResultRowObject(null, 'password'));
  23.  
  24. $this->_redirect('/');
  25. }
  26. {
  27. $this->view->errorMessage = "Błędny login lub hasło, proszę spróbować ponownie.";
  28. }
  29. }
  30. }


Logowanie - podstawowa sprawa, które powinna wymagać ode mnie minimum kodu.
A tymczasem gdzie jest w tym odwalenie za mnie roboty ? Przecież ja sam musiałem ten kod napisać, a framework ma podobno przyspieszać pracę ? A dodatkowo do tego formularz logowania też trzeba samemu stworzyć - to ma być przyspieszenie pracy ? Przecież gdybym nie skorzystał z Zend Frameworka miałbym niewiele więcej pracy - musiałbym zrobić to samo co w Zendzie + napisanie prostej klasy.

Oczywiście w przypadku innych rzeczy takie podejście jak w Zendzie byłoby ok, ale tu przecież mowa o czymś tak podstawowym jak logowanie - to powinno wymagać minimum pisania kodu, a tymczasem tak nie jest.

Koniec z dyskusji z mojej strony, chcecie to zostańcie przy Zendzie, ja jednak wolę używać rzeczy, które przyspieszają tworzenie stron.
-=Peter=-
Nie jestem żadnym zwolennikiem ZF, osobiście wolę pisać w symfony, ale znam w pewnym stopniu obydwa frameworki.

A powiedz mi czy symfony samo z siebie automatyzuje autoryzację? Nie, trzeba samemu napisać formularz, samemu napisać odpowiedni walidator. No chyba że są jakieś nieoficjalne pluginy do tego, ale takie coś i do ZF by się znalazło. ZF oferuje nam za to narzędzie do autoryzacji, które możemy wykorzystać do autoryzacji http, czy zwykłego logowania na sesji.

Jeśli chodzi o te śmieszny przykład z Acl którego nie rozumiesz (tak pisałeś w poprzednich postach), to cie oświecę:

Cytat
  1. set_include_path(implode(PATH_SEPARATOR, array(
  2. realpath(APPLICATION_PATH . '/../library'),
  3. realpath(APPLICATION_PATH . '/plugins'),
  4. )));


Ustawienie include path, aby można było w łatwy sposób includować pliki. Nie ma bezpośredniego związku z Acl. To się ustawia w każdym projekcie.

Daje nam to tyle, że aby coś includować (np. '../library/Zend/JakaśKlasa.php') to możemy pominąć część relatywną ścieżki ('../library'), a używać tylko 'Zend/JakaśKlasa.php'.

Cytat
  1. autoloadernamespaces.0 = "Zend_"
  2. autoloadernamespaces.1 = "My_"

Ustawienie przestrzeni nazw dla autoloadera. Nie ma to bezpośredniego związku z Acl. To też się ustawia w każdym projekcie, ja osobiście mam to ustawione w bootstrapie, a nie w plikach konfiguracyjnych.

Cytat
  1. public function _initAclPlugin()
  2. {
  3. $acl = new My_Acl();
  4.  
  5. $fc->registerPlugin(new My_Plugin_Acl($acl));
  6. }

Tylko to odpowiada za rejestrację pluginu. Zaraz zaczniesz narzekać, że aby użyć Acl to trzeba utworzyć plik index.php i odpalić w nim bootstrapa...
modic
Zdecydowanie na sam początek, do nauki najlepsze jest CI, prostota, świetna dokumentacja i łatwość użytkowania.

Nie wiem jak Wy, ale ja osobiście zalety CI cenię bardziej niż wsparcie dla php5, choć miło by było z estrony developerów jakby sobie o nim przypomnieli.
Niby jeszcze jest Kohana, takie niby ulepszone CI, ale wiele rzeczy jest tam zrobiona zupełnie inaczej i jak dla mnie jest troszkę irytująca, szczególnie to że nawet nie było przykładowych plików konfiguracyjnych, tylko trzeba było w necie szukać, no i to że nie mam takiej swobody jak w CI
phpion
Cytat(modic @ 5.11.2009, 21:38:20 ) *
Niby jeszcze jest Kohana, takie niby ulepszone CI, ale wiele rzeczy jest tam zrobiona zupełnie inaczej i jak dla mnie jest troszkę irytująca, szczególnie to że nawet nie było przykładowych plików konfiguracyjnych, tylko trzeba było w necie szukać, no i to że nie mam takiej swobody jak w CI

blinksmiley.gif jakich plików konfiguracyjnych? W katalogu system/config masz wszystkie wyjściowe wersje plików konfiguracyjnych. Wyjściowe, bo Kohana wspiera kaskadowość plików. Nie rozumiem również w jaki sposób Kohana ogranicza Twoją swobodę. Jak dla mnie K jest duży krok przed CI i jak na chwilę obecną nie zanosi się by CI ją przegoniło.
qba_rox
Takie dyskusje sa prowadzone przez ludzi, ktorzy nie maja pojecia o biznesie webowym.
Wiewiorkowi powinni zabronic tu pisac, jak mozna negowac framework, tylko dlatego bo nie potrafi sie go zrozumiec. A moze lepiej bylo zostac krawcem? (bez ujmowania krawcowm)
Zyx
Moje główne zastrzeżenie dotyczy frameworków PHP w ogólności, konkretniej - implementacji MVC, która żadnym MVC nie jest. Weźmy pseudokod w stylu pierwszego lepszego frameworka:

  1. public function costamAction()
  2. {
  3.  
  4. $model = Item_Model::create();
  5. $pagination = new Pagination($model->count(), 30);
  6. $data = $model->select('a, b, c)->where('foo = ?', $bar)->order('joe')->limit($pagination);
  7.  
  8. $view = $this->getView('index');
  9. $view->data = $data;
  10. $view->pagination = $data;
  11. $this->contentManager->addView($view);
  12. } // end costamAction();


Teraz pseudokod no-framework:

  1. function costamAction()
  2. {
  3. $pdo = Registry::get('pdo');
  4. $pagination = new Pagination(Count_Data('item'), 30);
  5. $stmt = $pdo->query('SELECT a, b, c FROM item WHERE foo=:bar ORDER BY joe '.$pagination->getLimit());
  6. $stmt->bindValue(':bar', $bar);
  7. $stmt->execute();
  8. $data = array();
  9. while($row = $stmt->fetch(PDO::FETCH_ASSOC))
  10. {
  11. $data[] = $row;
  12. }
  13. $stmt->closeCursor();
  14.  
  15. $template = new Template('index');
  16. $template->data = $data;
  17. $template->pagination = $pagination;
  18. $template->display();
  19. } // end costamAction();


I teraz pytanie stulecia: co takiego jest w pierwszym kodzie, czego nie ma w drugim, że pierwszy nazywamy "zgodnym z MVC", a drugi nie? Bo według mnie nie ma nic, a oba kody poza stopniem wykorzystania obiektówki, elegancją i poziomem opakowania powtarzalnych operacji nie różnią się zasadniczo od kodu, który potrafi napisać przy użyciu mysql_query() i funkcji pierwszy lepszy człowiek po dwóch miesiącach nauki PHP. Do tego dochodzi jeszcze mnóstwo kwiatków związanych z umieszczaniem danego elementu nie tam, gdzie powinien być (np. stronicowanie w kontrolerze).

Jak ktoś się uprze, to doprowadzi kod do postaci, gdy będzie to zgodne z MVC, tylko dlaczego w takim razie nie dostajemy takiej postaci od razu, skoro niby "MVC jest zaimplementowane"?

LBO
@Zyx, przyjrzyj się Agavi
MarcinTryka
Cytat(wiewiorek @ 8.10.2009, 19:28:46 ) *
Źle napisałem, miałem poprawić, ale zapomniałem - chodziło mi o uprawnienia - Zend_Acl, przez kilka dni szukałem co i w jakim pliku dodać żeby dostęp do danej strony miała osoba tylko o wysokich uprawnieniach, w symfony wystarczyłoby zrobić:
  1. is_secure: on
  2. credentials: [wysokie]

Ok. A co jeśli jeden użytkownik na wysokim poziomie ma mieć dostęp do swoich stron i do stron ludzi o najniższym poziomie, a inny nie? A jeśli tylko fragermnt danej srony w zależności o d uprawnień ma być wyświetlany?
A jeśli ACL ma zależeć nie od "poziomu" że im wyżej tym więcej może ,a według przydzielonych uprawnień do konkretnych akcji/pól dla konkretnego urzytkownika/grupy?

Cytat(wiewiorek @ 9.10.2009, 09:08:12 ) *
Logowanie - podstawowa sprawa, które powinna wymagać ode mnie minimum kodu.

To robisz sobie moduł logowania z konrolerem, helperem i modelem. I wklejasz jak to takie powtarzalne.
Oczywiście da się zrobić frameworka w którym piszesz:
[logowanie]
I już Ci obsługuje bazę danych, tworzy przekerowania, kontroler, wyświetlanie informacji... coś takiego już zrobiono, nazywa się Joomla. Jak chcesz programowąć to potrzebujesz dostępu do tych małych klocków. Jak masz tylko jeden klocek to jak przychodzi konieczność zmian/zrobienia czegoś nieszablonowego to leżysz i kwiczysz. Tutaj jest takie podejście że ja sobie składam z małych klocków większy kawałek strony, z którego korzystam wielokrotnie, a jak chcę zrobić coś niestandardowego to mam opanowane podstawy i wiem jak co poprzekładać.

Nie srpowadzajmy frameworków do łatwości CMSów typu Joomla, bo to inna działka. PRzecież nie chodzi o to żeby było tak proste żeby nie-programista programował używając frameworka. i jakiegoś tutoriala na 3 strony.
dr4ko
Cytat(MarcinTryka @ 15.11.2009, 18:06:12 ) *
Ok. A co jeśli jeden użytkownik na wysokim poziomie ma mieć dostęp do swoich stron i do stron ludzi o najniższym poziomie, a inny nie? A jeśli tylko fragermnt danej srony w zależności o d uprawnień ma być wyświetlany?
A jeśli ACL ma zależeć nie od "poziomu" że im wyżej tym więcej może ,a według przydzielonych uprawnień do konkretnych akcji/pól dla konkretnego urzytkownika/grupy?


Ustawienia w security.yml w Symfony nie służą do określania tego co ma się wyświetlić tylko do określenia czy dany użytkownik w ogóle może wywołać daną akcję. Uprawnienia w yamlu można łączyć operatorami logicznymi i sprawdzać dowolną konfigurację uprawnień ale jeszcze raz zaznaczę że tylko w celu określenia czy daną akcję odpalić. W akcji wystarczy sprawdzić uprawnienia użytkownika wywołując
  1. $this->getUser()->hasCredential('uprawnienie')

i zrobić to co dla danego użytkownika ma się wykonać. Symfony ma naprawdę łatwy i przyjemny system uprawnień tylko trzeba go stosować z głową.
NuLL
Cytat
Do tego dochodzi jeszcze mnóstwo kwiatków związanych z umieszczaniem danego elementu nie tam, gdzie powinien być (np. stronicowanie w kontrolerze).

@Zyx - A gdzie wg Ciebie według Ciebie to powinno być umieszczone ?
wiewiorek
Używał może ktoś ORM Designera dla Symfony i Doctrine/Propel ?
http://www.orm-designer.com/web/screenshots
Pobrałem i zainstalowałem wersję testową, fajna sprawa smile.gif
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.