04.10
Після досить тривалого використання Django фреймворку, спробував попрацювати з Zend Framework в рамках роботи над досить цікавим проектом. Про отриманий досвід не жалкую – саме в такому “бойовому” випробуванні можна дати реальну оцінку якості продукту. Всі наведені нижче думки є моєю суб’єктивною думкою від використання Zend Framework версії 1.5RC і на об’єктивність не претендують :)
Мені ZF однозначно сподобався. У порівнянні з тим, з чим доводилось працювати раніше – plain PHP та різного роду корпоративні ЦМСки та різні інші доробки – Zend Framework вигідно вирізняє продуманність, кількість та якість документації та зрозумілість самого коду – в багатьох випадках достатньо було продивитись сирці батьківських классів для знаходження ясності.
Під час роботи спробував такі речі:
- вбудовану систему темплейтів - бачив реалізацію з використанням Smarty, навіть пробував працювати з нею, та дуже вчасно знайшов в транку проекта Zend_Layout. PHP, як виявилось, є дуже добрим шаблонізатором :), тому всім рекомендую використовувати саме такий варіант;
- клас для роботи з БД (Zend_Db) – поки що це якраз типовий клас для роботи з бд, до орм йому ще, як до Парижу рачки. Прив’язати таблиці між собою можна, та, повірте мені, набаго простіше з самого початку заюзати $db->select і вручну скласти необхідний запит, ніж намагатись вистроювати його через систему залежностей між таблицями. Тільки себе заплутаєте та тих, хто буде працювати над проектом після вас :).
- систему маршрутизації запитів(Zend_Router) – завдяки їй ви можете зібрати всі лінки сайта в одному місті, структурувати їх та дати їм псевдоніми, так буде простіше в випадку, коли доведеться щось перероблювати/переставляти/тощо.
- реєстр (Zend_Registry) та Zend_Session – першу фігню зручно використовувати замість DEFINE, задав всю конфігурацію в одному файлі, закинув в реєстр – і працюй на здоров’я. Zend_Session же допомагає зберігати користувацькі дані. Чесно кажучи, використовувати напряму масив $_SESSION в ZF мені просто не вдалося. Не питайте чому, не знаю;
- систему запитів в цілому то структуру програм взагалі – сподобалось, що є структурована система запитів module->controller->action->etc - хочете ви чи ні, а доведеться навести лад в програмі, щоб все було до ладу, інакше просто не запрацює :) Про структуру програм сподобався чіткий розподіл контролерів, темплейтів та моделей. Не змарнував модливості розділити весь сайт на декілька незалежних модулів, які розніс по різних директоріях. Тепер набагато легше можна буде вирізати частину функціоналу до іншого проекту.
Не вдалось поки що спробувати Zend_Cache, бо, кажуть, ZF жере багато ресурсів. Переконатись не важко – xDebug встановили і вперед! Zend_Form з’явився вже в фінальній версії ZF1.5, спробувати його не встиг. Та, судячи з всього, поки не склепають з Zend_Form + Zend_Db щось цілісне – не покриє воно всіх потреб. В своєму проекті з усіма формами працював за допомогою вбудованих хелперів formText/formSelect/тощо та додаванням методів validate в моделі(точніше класи Zend_Db, якими описував наявні таблиці).
Сам проект в результаті був трохи затягнутий перш за все тим, що доводилось під час програмування розбиратись з самим фреймворком, вивчати його модулі та вбудований функціонал. Та, впевнений, більше буде збережено часу на підтримці самого продукту. За розвитком Zend Framework обов’язково буду слідкувати надалі – якщо доведеться розроблювати ще щось на РНР – кращого інструменту не знайти.
Update: c самого початку я омовився про Django. Так от, щоб не було холіварів, я навмисне не порівнював ці два фреймворки. Zend Framework ще не дійшов до рівня, коли його можна порівнювати з джангою. Втім, для своїх задач – коли стоїть жорстка умова використовувати РНР – Zend Framework є цілком прийнятним рішенням.


[...] Чувак после работы с Django хвалит Zend Framework. Или это агент влияния или я ему не верю. [...]
Если вам будет дана возможность выбирать фреймворк для проекта, то что вы выберете: Django или ZF?
Предположим, что заказчик вам дает пустой VPS и полную свободу выбора.
Віктор, якби вибор був лише за мною, я би вибрав Django.
Проте, існують ще питання економічної доцільності. Розробників на python зі знанням django ще дуже мало і може статися, що розробка і підтримка проекту на джанго буде набагато дорожча ніж на РНР. Тому дуже часто зараз вибирають саме РНР.
Just try Symfony :) Не так продумано, как ZF, но гораздо более удобное, как фреймворк.
Как по производительности?
Насколько длителен процесс поиска готового решения в ZF?
Имеется ввиду если мне нужна какая-то функциональность и я подозреваю что она должна быть в ZF – сколько времени уходит на её поиск?
Были ли ситуации при которых вроде все написано как по учебнику, а не работает – в результате тратится час времени на танцы с бубном?
по швидкодії поки що сказати мало що можу, як запустимо проект і піде навантаження – скажу детальніше.
процес пошуку готового рішення – спочатку в документації проглянути, якщо немає такого – хвилин 5-10 с гуглем вирішать спрау :) таким чином був знайдений невеличкий сторонній клас в ідеології ZF для обробки зображень :) вже за півгодини від появлення потреби він працював :) за час розробки обходився гуглем та документацією.
проблеми з функціонуванням можуть лише статись, якщо користуватись девелопмент версією, взагалі таких ситуацій особисто в мене ще не було навіть з 1.5RC, хоча в ru-zend-framework
раз чи два з’являлись повідомлення про подібні помилки.
ZF – это действительно удобно к тому же разрабатывается самим Zend, поэтому если этот фреймворк и умрет, то вместе с пхп, чего не скажешь о других фреймворках на PHP. Поэтому, если PHP – то только ZF.
Рекомендую спробувати CakePHP, якщо буде нагода. Сам використовував і ZF і CakePHP. Враження від обох хороші, але останній може похвастатись справжнім ORM, зручною роботою із формами все те, що є у ZF. Мінус – не настільки суворий як ZF, адже сумісний із PHP4. Тобто ООП там на відповідному рівні. Ідеологічно ж Cake багато взяв у Ruby on Rails.
Користуюсь Zend Framework вже більше року, більшість вражень суто позитивні.
Zend_Cache дає прості і зрозумілі методи для роботи з кешем, підримує кешування блоків, массу фронтенд и бекенд адапторів. Звичайно з точки зору швидкодії Zend_Cache може програвати кастомному рішенню, але це є нормальною поведінкою для загальних рішень типу фреймворків.
Ще можна відмітити дуже зручний класс Zend_Acl для роботи з правами і доступом.
Для початківців я написав туторіал – http://zendframework.ru/articles/tutorial-building-basic-site-on-zend-framework-1-5/
Александр Махомет, не повірите – тільки но переглядав цей туторіал :) Та вже скинув декілька знайомим лінки :) Дякую вам за нього!
Интереснро, никогда такого не слышал ранее!