В свете того, что создаётся большое кол-во тем в разных разделах форума и это уже начинает бесить, переносим всё обсуждение сюда!
Моё сообщение из темы про ZF: Zend по моему мнению слишком обширен и является больше библиотекой классов. Он не задаёт никакой структуры - по сути вам нужно самому собрать каркас на его базе, который вам нравится. Но отсюда можно сделать следующие хорошие и плохие выводы. Хорошие: Конструктор "собери сам". Можно собрать именно ту комбинацию и связать именно так, как нужно вам. Исходя из первого следует отсуствие навязывания структуры. Качественная реализация всего и вся. Зачастую в нём правильно реализовано такое, чего вобщем-то в других фреймворках зачастую нету (слишком ресурсоёмко). Плохое: Опять же конструктор "собери сам". Пользу с этого получат только настоящие профи, знающие фреймворк и имеющие большой опыт в построении приложений, в основном сложных. Слабая связь компонентов отнюсь не в плюс производительности. Небольшие вещи делать на его базе смысла мало. Очень объёмный, очень абстрагирован. Зачастую с этим объёмом сложно справится. Личное ИМХО: Для многих задачь он слишком тяжел и слишком большой, что бы на нём работать в маленькой плотной комманде. Мой личный опыт работы с Zend_Mail показал, что как ни странно у него очень скудная документация и API. API не описан вообще - просто сгенерирована дока с исходников. В итоге найти что-то не описанное в руководстве вынуждает лезть в код и смотреть там. А там такое кол-во интерфейсов, абстрактных класов и так всё размазано, что охреневаешь в первые разы от того, что не можешь найти быстро то что надо. Нет, я не говорю что он плохой. Просто большой, слишком. Нужно потратить много времени на вникание в него. Лично я его использую как бибилиотеку к Yii, тот-же Zend_Mail помоему единственное вменяемое решение (в Yii нету своего Mail компонента) в дикой природе - и SMTP, и авторизация, и локальная отсылка. Когда разберёшься - оно прекрасно. Лично я бы вам посоветовал бы взять Yii. Он очень хорошо продуман, он сделан практиками для практиков. Взаимодействие с AJAX встроенно чуть ли не в каждый компонент, который что-то отдаёт в браузер. Формы, валидация, AR в нём действительно радуют (можете поискать мои сообщения по форуму - я вообще больше по highload, поэтому я очень аккуратно отношусь к OOP ради OOP и всяким Active Record, Data Mappers, etc). Тот же AR умеет грузить связанные данные разными способами - стандартным для AR (выбрали родителей, потом выбираем детей аля запросы в цикле), так и через JOIN запросы, что естественно радует. Кажется он даже умеет делать IN запросы на детей. А самое главное - AR в нём не накладывает ограничений на то, что можно запихивать в поля. С помощью CDbExpression класса можно спокойно сделать так: PHP: <?php $model->dateField = new CDbExpression('NOW()'): $model->password = new CDbExpression('PASSWORD(:password)', array(':password', $password)); и.т.д. CDbCriteria позволяет легко манипулировать JOIN, WHERE и прочими атрибутами запросов. Т.е. зачастую даже не сильно простые запросы нет необходимости делать в обход AR. А если уж нужно обойти AR, то не нужно обращаться к базе на прямую. Просто переходим на более низкий уровень (называется DAO). Пример: PHP: <?php $sql = 'SELECT a, b, c FROM table WHERE d = :blah AND f = :ups'; $connection = Yii::app()->getDb(); $command = $connection->createCommand($sql); $data = $command->queryAll($sql, array(':blah' => 'blah data', ':ups' => 'ups data')); Очень удобно и элегантно. По сути AR это надстройка над этим DAO. Т.е. в природе не существует SQL запроса, который пришлось бы делать в обход стандартных механизмов Yii (что далеко не правда для многих AR). И таких мелочей очень много. Я постоянно удивляюсь продуманности Yii. Его продуманная ООП структура позволяет переопределить любой компонент фреймворка простым extends и добавлением записи в конфиге (что требуется в основном только для самых базовых компонентов). Все дополнительные вещи, которые мне нужны были и небыло extensions по сути сводились к добавлению своего компонента аля MyClass extends CSomeBaseClass и переопределению нужного метода. Конечно не без багов или отсуствием определённых вещей, но мои баг репорты в SVN были исправленны буквально за несколько дней, а так как выход каждый месяц, то соотвественно не нужно ждать по пол года. Ну а покопавшись в его внутренностях становится понятно что там разобраться легко, я скоро уже сам начну для него патчи делать и сабмитить З.Ы. А вообще я использую SVN версию в production. Ну естественно тестируется локально и если всё ок - вываливаю на production. 3-й месяц ни единого глюка. А всё потому, что комманда у них ограничена конкретными людьми, которые целенаправленно занимаются разработкой Yii.
Psih - а вот теперь попробуй переопределить СActiveForm, который надстройка на CHtml который вызывается статикой и нужный к переопределению функционал оказывается внутри CHtml. Или в процессе написания переопределения CActiveForm ты из-за того, что нужное свойство зачем-то поставили в private вынужден переносить 30-40 строчный метод вверх тупо копируя его ради замены одного символа, по сути. А уж какое шаманство пришлось делать в переодпределении, что бы ошибки валидации заключить в два DIV вместо одного... страшно смотреть. Или совершенно непрозрачная система assets - ибо кто бы мог подумать, что при разворачивании системы на другом хосте пачка assets будет сгенерированна заново под другим id? Или настолько странные недодуманности, что даже удивляешься, например, что бинд параметров в CDBCriteria прерывает цепочку. Т.е. условия в цепочке пишем, а параметры прибиндить - не догадались сделать. Удивляет часто встречающееся даже документации отсылка к $_POST тогда как есть request класс. Угнетает необходимость описывать /** @var **/ для каждого Model::model()->findByPk и т.д, но с этим еще ладно, готов смириться. Не нравится слишком большая вольность обращения со свойствами. Имхо, или мы работаем напрямую с гетерами/сетерами, или мы работаем напрямую со свойствами. Вызывание гетеров/сетеров прозрачно при обращении к свойству мне кажется очень неверной концепцией, потенциально генерирующий ошибки. Ну и фреймворк для построения активных сайтов без встроенной компоненты создания e-mailов - очень странно. Еще жаль, что без фильтров - с ними явно видно стадии, которые проходит приложение, вместо того, что лезть в код и разбираться. Т.е. вот такое - понятно Код (Text): //$this->registerFilter(new acHandle('src/filters/DebugFilter')); $this->registerFilter(new acHandle('filters/acUncaughtExceptionHandlingFilter')); $this->registerFilter(new acHandle('filters/acSessionStartupFilter')); $this->registerFilter(new acHandle('filters/acResponseTransactionFilter')); $this->registerFilter(new acHandle('src/filters/acUserRequestDispatchingFilter')); $this->registerFilter(new acHandle('filters/acViewPerformingFilter')); $this->registerFilter(new acHandle('filters/acCurrentPositionFilter')); $this->registerFilter(new acHandle('filters/acActionPerformingFilter')); $this->registerFilter(new acHandle('src/filters/acContentPerformingFilter')); А такое Код (Text): Yii::createWebApplication($config)->run(); нет. Особо если требуется, к примеру, сделать отдельный скрипт, но с проверкой авторизации. Вот в общем впечатления от Yii - приятный фреймворк, можно работать, но требует излишне много возни в доведении до ума в таких местах, в которых подвоха и не ожидаешь.
да есть там каркас по дефолту. zf create project сделайте и увидете. еще бы я рекомендовл посмотреть видиотуториалы. там по шагам объесняется и как написать простейшее приложение. как исопльзовать рзличные компоненты для веб приложения. как использовать БД - модели и т.п. --- прочему drupal есть а джумлы нету в опросе?
MiksIr Насчёт CHtml и ActiveForm я честно говоря не догоняю в чем проблема, пример в студию. У меня проблем с этим не возникло вообще. Что касается assets, то тут явное непонимание того, что это менеджер и что assets генерируются автоматом. Весь твой CSS и JS должны лежать в другом месте и браться через assets manager оттуда. Assest менеджер отвечает за то, что если ты изменил CSS или JS файл, он автоматом сгенерирует новый под другим ID и изменения вступят в силу моментально. Тем самым assets может быть закешировано на вечно в браузере и не париться о том, что файлы сменятся. Не говоря уже о том, что к этому делу влёгкую прикручиваются Yum compressor & co, конкатенация файлов, обсфукация и прочие радости. Насчёт CDbCriteria пример в студию, потому что я вообще по другому делаю через массив. Насчёт фильтров, что они вообще делают то? В Yii по моему просто совершенно другой подход.
> Насчёт CHtml и ActiveForm я честно говоря не догоняю в чем проблема, пример в студию. Значит у тебя не было задач выходящих за рамки того, что там насували. > Что касается assets, то тут явное непонимание того А я и сказал, что про нее просто мало сказано. На самом деле из-за приватного свойства в CActiveForm самое красивое и быстрое решение оказалось подправить пару символов в js валидаторе в надежде, что никто эти переписанные assets больше трогать не будет. Мне и в голову не пришло, что при копировании на новый хост все assets сгенерятся еще раз под другим ID. Вообще попробуй обосновать необходимость менять ID на разных хостах. > Насчёт CDbCriteria пример в студию, потому что я вообще по другому делаю через массив. Что-то вроде $criteria->addCondition('EAV.attribute = :bind')->params['bind'] = 'xxx' когда как выглядит логично что-то вроде $criteria->addCondition('EAV.attribute = :bind')->setParam('bind', 'xxx')->addCondition.... > Насчёт фильтров, что они вообще делают то? В Yii по моему просто совершенно другой подход. Ничего особо не делают. Т.е. каждый фильтр делает определенное действие, как видно по названию, инициализирует сессию, отрабатывает роутинг, дергает контроллер и т.д. Т.е. если мы хотим в своем приложении получить сессию только без роутинга и т.д. - сразу видно из примера, что нужно делать. В случае Yii нужно Yii::createWebApplication($config)->run(); заменить на $app = Yii::createWebApplication($config); $user = $app->getComponent('user'); Как думаешь, сколько времени требуется найти это решение челвоеку, который не знаком с фреймворком?
Да приходилось делать и извращения, вроде ничё, справилсо Оно не от хоста меняется, а от времени модификации файлов. Закачал на новый сервер и ага, время модификации уже другое. Более детально ещё не разбирался (см. ниже есть ссылка на детальное описание). Я CdbCriteria так просто не юзаю. Насколько я знаю оно не завязано на цепочки, а вот так: PHP: <?php $criteria = new CDbCriteria(array( 'condition' => 'EAV.attribute = :attribute AND EAV.attribute2 = :attribute2', 'select' => 'id, attribute, attribute3', 'params' => array(':attribute' => $someval, ':attribute2' => $someval2), 'order' => 'datefield DESC', )); Лично для меня очень удобно и понятнее чем цепочки. Я уж не говорю об удостве сбора массива и использования array_merge Хорошо, найти не всё легко (и это больше промах документации). А вот объяснить легко почему именно PHP: <?php Yii::createWebApplication($config)->run(); Два слова: Lazy load Этот паттерн пронизывает весь фреймворк и компоненты инициализируются при первом использовании. Второе - это то, что фреймворк построен для скорости, что исключает инициализацию всего и вся в начале. И слабо связанные компоненты скорости не способствуют. Однако что бы получить доступ к компонентам не всегда надо делать getComponent, большая часть стандартных компонент имеет алиасы. К примеру: PHP: <?php Yii::app()->request; // CHttpRequest Yii::app()->user; // CWebUser // etc... У фреймворка порог вхождения далеко не "каждый идиот может разобраться". Тут без хорошего понимания ООП и определённого кол-ва упорства никуда не получится продвинуться. API Reference у фреймворка можно сказать идиальный, а вот общая документация местами упускает некоторые вещи (это в процессе устранения). Вот что нужно обязательно прочитать: http://yiiframework.ru/doc/guide/ru/index - гайд по Yii. http://yiiframework.ru/doc/cookbook/ru/index - рецепты, в них кстати какраз про assets написано. http://www.yiiframework.com/wiki/ - Wiki на офф. сайте - тут тоже дофига рецептов. http://www.yiiframework.com/doc/api/ - API Reference ваш друг и товарищь, без него пропадёшь просто. Очень удобное и хорошо описанны все методы и параметры. Google как правило находит ВСЁ
pohapecoder Потому что Joomla это CMS, а не CMF. Друпал всё же для программистов, а не на конечного пользователя расчитан. CMS мы в расчёт не берём.
А есть ли смысл в Prado в опросе? Это же ступень эволюции Yii, если не ошибаюсь. Автор у них один. Почему в опросе нет пункта "никаким"? Psih, не увлекись ты Yii, сам бы тут флейма навёл, что mysql_query() рулит, а мы все дураки.
lexa Ну от mysql_query я уже давно отошел, mysqli в объектном синтаксисе уже очень давно пользуюсь Прадо убрал, пункт "никаким" добавил.
я за ZF, он мощьный в плане возможностей, качественный набор слабо связанных компонентов, легко интегрируется ибо хорошо стандартизирован. Если бы не ZF ну даже пусть остальные Y, Sf то PHP бы как бы считался на порядок ниже языком, ну мы же с вами знает, что он хорош. Это я так просто...
Я тоже скажу. Обошел весь инет в поисках удобных классов на тему mail, ldap, date, auth, session, config, log, autoload, registry, убил на это тонны времени, потом писал еще кучу враперов над этим делом, чтобы добавить исключения. Никому не советую поступать так же, потому что потом в один прекрасный момент все, что написал, нашел в Zend_Framework только даже там все выполнено еще добросовестнее. Как бы без халтуры. Там уже все ООП и уже все на исключениях. Про Zend МВЦ ничего не буду говорить, он у меня свой (в сто раз лучше чем любой фреймворковский). Но библиотечные классы там на пятерочку! Может где-то в симфони или Yii они еще лучше сделаны, я в др. фреймворках прикладные библиотеки не изучал, но если честно сомневаюсь. Кстати, как вы считаете, если отбросить мвц и орм из фреймворков и оставить только прикладные повседневные классы в ZF они написаны лучше чем в других фреймворках? ps: мой голос за ZF
alexey_baranov Ну где как. В Yii к примеру не всё есть, но у Yii есть расширение, которое добавляет autoload для Zend фреймворка и он туда встаёт как родной. ИМХО, Yii + ZF как библиотека классов просто замечательнейшая комбинация, без которой своё программирование уже не представляю MVC у Yii лучше - легковестное, простое и очень быстрое.
Dagdamor В использовании помоему не отличается общего стандарта, просто сама реализация легковестная. Вписал роут в конфиг файл, создал контроллер и в нём actionNameOfTheaction и всё - works.
Из того, с чем работал: . ZF: подробные доки и крупное сильное коммьюнити, здоровая библиотека. Еще из плюсов - часто используется. . Kohana: очень быстро работает, хороший код. Но мало доков, встроенная ORM не очень удобна.
Доброго времени суток. У меня такой вопрос: Мне нужно разработать базу данных и систему управления её(добавление, удаление, вывод данных) для учебного заведения, в которой будет информация о преподавателях. Там будет около 6 таблиц, в сумме до 1000 записей. Объёмы данных не очень большие. Я решил что это будет PHP/MySQL. И вопрос... на каком фрамеворке делать: drupal или zend framework?
друпал это сайтоскелет вам тут вобще ничего не надо. но друпал можно заюзать если очень хочется - надо же чем-то странички выводить
Ну в смысле написать как модуль для друпала. Там уже есть структура, ImageAPI, FormAPI, авторизация уже есть...