Холиварчик и 2 новогодних подарка
CakePHP - это только один из фреймворков. Признаюсь, я довольно поверхностно знаю Zend, Symfony и CodeIgniter (PHP), Rails (Ruby) и Django (Python). Так как по многим причинам мне приходится писать на PHP (сам я бы выбрал, наверное, Python - синтаксис нравится и готовых модулей много), то остаются только 4 известных фреймворка.
В предыдущем посте Sam, чей блог rmcreative.ru я сам читаю и часто кидаю ссылки нашим верстальщикам (это я так подлизываюсь, чтобы он меня в друзья добавил, как сделал Лог программиста :)), сказал, что с помощью Zend легко делается то, что нельзя сделать на Cake. Ну, я, истинный евангелист Cake, сразу же нашёл как это сделать двумя способами.
Да, так вот, уверен, что среди читателей блога есть люди, которые не так фанатично любят Cake, а предпочитают по каким-то причинам evil Zend другие фреймворки. Но, уверен, вы довольно умны и приняли это решение обдуманно, понимая хотя бы в общих чертах философию и возможности других PHP-фреймворков, включая Cake.
Пожалуйста, напишите в комментах, что может хорошего делать ваш любимый фреймворк и чего не может Cake. Условия:
- соревнуются только PHP-фреймворки;
- возможность должна быть действительно полезной, а не надуманной;
- скорость работы скриптов не обсуждается - предполагается, что все ресурсы бесконечны, кроме труда программиста.
Я попробую придумать как это сделать в CakePHP и, может быть, мне помогут такие гуру как Анатолий, Дмитрий и Влад (напомню, что на этом блоге после 5-го комментария rel=”nofollow” убирается
).
Чтобы вас раззадорить, посмотрите статистику поисковых запросов (Google Trends):

Знаю, что искать “zend framework”, а не “zend” было не совсем честно, но “zend” много искали и задолго до появления Zend Framework.
И ещё одна просьба, которая поможет получить побольше откликов и больше шансов найти невозможные для CakePHP вещи. Вы ведь тоже программисты и у многих есть блоги. Напишите, пожалуйста, в следующем своём посте (где-то в конце, когда ваш пост уже дочитают) об этом посте. Ссылка “Почему CakePHP - отстой по сравнению с другими PHP-фреймворками” подойдёт ![]()
Если у вас нет своего блога, но вы Хабрачеловек, напишите, пожалуйста, в http://habrahabr.ru/blog/php/.
А теперь новогодние подарки!
Подарок 1
Тот, по чьей ссылке прийдёт больше всего людей (буду смотреть 25 декабря, так что можно успеть поставить ссылку несколько раз), получит от меня огромную благодарность и 10WMZ (или аналог в Яндекс.Деньгах). Если будет с Хабрахабра или какого-то другого сайта вроде News2.ru, то всё равно найду по нику создателя новости
Подарок 2
Человек, который придумает самую полезную вещь, которую нельзя будет относительно легко реализовать в CakePHP, тоже получит от меня 10WMZ. В качестве жюри будут выступать читатели блога (я сделаю голосование в отдельном посте 20 декабря, голосование закончится 25 декабря)
UPD 25 декабря 2007: Победитель определён.
Вообщем-то фремворк который я использую (CodeIgniter) ничего не умеет, но зато он мне нравится.
Пиар повсюду) я предпочитаю писать на своем.
Скажу только одно. Мне нравятся некоторые библиотеки в Zend (например реализация кеша с тэгами), которые есть в Cake. Кроме того Zend имеет большой набор врапперов для различных API, этого в cake точно нет.
Соответственно место Zend’a в папке vendors
А чтобы все работало надо добавить в /app/config/bootstrap.php строку:
ini_set(’include_path’,ini_get(’include_path’) . PATH_SEPARATOR . APP. ‘vendors’);
Добавил ссылочку
Я не говорил, что нельзя сделать. Я удивился, что это не так очевидно и я сразу не нашёл.
Вообще очень и очень полезно порыть другие фреймворки. Сразу возникают идеи, что можно улучшить в своём любимом.
Так… перечислю, чего мне нехватает сейчас в Cake:
1. Нормальной полностью рабочей системы авторизации и управления пользователями на основе ACL с поддержкой групп пользователей и админкой. Всё в виде модуля и чтобы можно было выставить права хотя бы на каждый action в контроллере.
Понимаю, что это довольно большая штуковина, но всё-таки, как мне кажется, для 80% проектов нужна.
2. Насмотрелся в своё время на Propel. Интересно было бы нафигачить генератор ORM-кода на основе bake-консоли. Или такой уже есть?
3. Пока не очень понятно, как сделать файл-менеджер. Т.е. контроллер примапленый к /files/ без модели (это я умею), который бы выводил структуру папки. В общем, то же, что и на http://rmcreative.ru/files/.
4. Очень удивило отсутсвие в Cake встроенного логгера.
5. Возможно, я плохо читал доку, но не нашёл форварда в контроллерах: $this->forward(’/anotherController/anotherAction’); - передаёт выполнение другому контролеру и action-у передавая все переменные, подключенные библиотеки и т.д. Такое есть в моей собственной наработке и Zend-е.
Пока всё.
2sam:
1. согласен
2. а зачем? насколько я понял речь идет о статических родительских классах моделей. В Cake вся сила заключена в динамизме моделей и поведений(behaviors).
А генерировать ассоциации bake и так умеет
3 Классы File и Folder
4. Логер есть
5. requestAction с передачей параметров через passedArgs. В пределах класса понят проблем вообще нет.
1. Кто бы написал

2. За тем, чтобы иметь меньше запросов (без всяких там describe) и нормальное дополнение кода в IDE.
3. Классы - понятно. Как настроить роутер, чтобы по http://rmcreative.ru/files/cdlist.rar он грузил файл, а не обращался к контроллеру.
4. Плохо значит читал
5. Можно пример?
2. describe выполняется только если debug>0
3. отдавай файл из конроллера. Вместо стандартного класса View используй Media.
4. CakeLog::write (’mylog’, ‘Message’). получишь запись в /app/tmp/logs в файле mylog.log
2. А откуда берётся инфа о таблице, если debug==0?
Эх, пост больше похож на заметку какого-нить СЕО, чем на статью программиста. =) Ну да ладно, не мне судить.
Признаюсь, честно с Cake еще не было времени разбираться, но бегло читая документацию и сравнивая, например, Cake & Zend, для себя выбрал Zend как набор готовых классов, при таком подходе гибкость ZF повышается при минимуме телодвижений. Этой же гибкости можно добиться и в Cake, но придется посидеть немного боле… т.к. CakePHP это все же FrameWork, а не набор классов.
В пользу CakePHP скажу, что устройство модели в данном FW мне понравилось, а в ZF если разобраться достойной модели вообще нет.
А вообще, чем больше читаю о различных FW тем более убеждаюсь, что свой лучше (во всяком случае для меня). Т.к. разрабатывается он уже около 4-х лет. Разрабатывался и в одиночку и в команде. На нем построена своя CMS. И работает просто неприличное количество сайтов ))))
А со всеми сторонними FW надо разбираться… Да и багов в них никак не меньше, чем в самописном. )))
З.Ы. За звание конечно спасибо, но я думаю я до него еще не дорос )
Я вот, кстати, не согласен вообще с выбором ZF vs Cake. На самом деле, не смотря на все плюсы зенда, пока на нем сподобишься сделать нормальный, универсальный scaffolding (админку, CRUD, называйте как хотите) - за%#$№ся надоест. В Cake довольно удобная и продуманная концепция MVC, да и много чего другого, нацеленного на построение сайта. В то же время ZF незаменим при работе с сервисами, либо когда нужно работать с HTTP, сокетами, IMAP, POP3 и т.д. и ОЧЕНЬ НЕ ХОЧЕТСЯ использовать стандартные PHP’шные функции (реально неудобно).
Мой вывод таков - ZF обязателен к установке в качестве частичной замены стандартной библиотеки PHP, ну и вообще - присмотреться к его устройству и отдельным его компонентам очень полезно. А вот юзать его в качестве платформы для быстрого построения сайтов я бы не стал - фреймворк на его основе пока что не сделали. Вот сделают - тогда посмотрим.
FX Poster, сейчас все и используют ZF как библиотеку классов )))
Не все, ой не все
Да, плохо сказал. за всех говорить нельзя.
Лучше сказать, многие кого я знаю использую ZF как набор классов )
2 Sam
>Так… перечислю, чего мне нехватает сейчас в Cake:
>1. Нормальной полностью рабочей системы авторизации и управления пользователями на основе ACL с поддержкой групп пользователей и админкой. Всё в виде модуля и чтобы можно было выставить права хотя бы на каждый action в контроллере.
А разве в CakePHP это не то http://cake-php.ru/acl ? Или у нее есть минусы перед реализацией ACL в ZendF ?
Naoki,
Я говорил не про ACL, а про систему авторизации и управления пользователями на её основе.
[...] месяц назад я предложил назвать недостатки CakePHP по сравнению с другими [...]
Количество поисковых запросов - не показатель ни разу. просто CI хорошо и так документирован - нет повода копаться в поисковиках. CIWiki разбработчики и так адреса знают
Есть сайт который хотела перевести на cakePHP, у него уже своя структура базы данных.
В настройках фреймворка не нашла где можно отключить плюрал форму для таблиц. То есть что бы к именам таблиц не приписывалось в конце “s”, пришлось залезть в код и поправить там.
Одна из основных причин по которой выбрала cakePHP это его хваленое ORM. У меня структура базы данных заточена под мультиязычность.
То есть каждая сущность, например новость, содержиться не в одной таблице а в двух.
1 news (где содержаться не текстовые данные, например дата, статус и т.д )
2. news_trans (где содержаться непосрдественно текст новости на разных языках и поле Lang = ‘ru’ или ‘en’ и т.д)
Таким образом простейшие sql запросы к одной таблице мне не нужны. Покопавшись в документации, я поняла, что ни какой ORM мне не грозит, все маломальски сложные запросы придется писать самостоятельно и выполнять с помощью метода модели query()
Я пишу query максимум раз в месяц. Иногда для оптимизации приходится использовать всякие AVG, SUM.
А ваш случай - очень простой, надо просто читать документацию
http://book.cakephp.org/view/71/model-attributes
В модели добавляете public $useTable = ‘news_trans’ и всё работает