За последние 24 часа нас посетили 20274 программиста и 1090 роботов. Сейчас ищут 724 программиста ...

Дискусия о фреймворках: зачем, почему, кто и что!

Тема в разделе "Прочие вопросы по PHP", создана пользователем Psih, 19 окт 2010.

?

Каким фреймворком или CMF вы пользуетесь?

  1. Zend Framework

    9 голосов
    10,1%
  2. Simphony

    9 голосов
    10,1%
  3. Yii

    22 голосов
    24,7%
  4. Kohana

    7 голосов
    7,9%
  5. Code Igniter

    6 голосов
    6,7%
  6. CakePHP

    0 голосов
    0,0%
  7. eZ Components

    0 голосов
    0,0%
  8. Drupal

    3 голосов
    3,4%
  9. Никаким

    32 голосов
    36,0%
  10. Laravel (добавлено)

    2 голосов
    2,2%
Можно выбрать сразу несколько вариантов.
  1. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    В свете того, что создаётся большое кол-во тем в разных разделах форума и это уже начинает бесить, переносим всё обсуждение сюда!
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Моё сообщение из темы про 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:
    1. <?php
    2. $model->dateField = new CDbExpression('NOW()'):
    3. $model->password = new CDbExpression('PASSWORD(:password)', array(':password', $password));
    4.  
    и.т.д.

    CDbCriteria позволяет легко манипулировать JOIN, WHERE и прочими атрибутами запросов. Т.е. зачастую даже не сильно простые запросы нет необходимости делать в обход AR.
    А если уж нужно обойти AR, то не нужно обращаться к базе на прямую. Просто переходим на более низкий уровень (называется DAO). Пример:
    PHP:
    1. <?php
    2. $sql = 'SELECT a, b, c FROM table WHERE d = :blah AND f = :ups';
    3. $connection = Yii::app()->getDb();
    4. $command = $connection->createCommand($sql);
    5. $data = $command->queryAll($sql, array(':blah' => 'blah data', ':ups' => 'ups data'));
    6.  
    Очень удобно и элегантно. По сути AR это надстройка над этим DAO. Т.е. в природе не существует SQL запроса, который пришлось бы делать в обход стандартных механизмов Yii (что далеко не правда для многих AR).

    И таких мелочей очень много. Я постоянно удивляюсь продуманности Yii. Его продуманная ООП структура позволяет переопределить любой компонент фреймворка простым extends и добавлением записи в конфиге (что требуется в основном только для самых базовых компонентов). Все дополнительные вещи, которые мне нужны были и небыло extensions по сути сводились к добавлению своего компонента аля MyClass extends CSomeBaseClass и переопределению нужного метода.

    Конечно не без багов или отсуствием определённых вещей, но мои баг репорты в SVN были исправленны буквально за несколько дней, а так как выход каждый месяц, то соотвественно не нужно ждать по пол года. Ну а покопавшись в его внутренностях становится понятно что там разобраться легко, я скоро уже сам начну для него патчи делать и сабмитить :)

    З.Ы. А вообще я использую SVN версию в production. Ну естественно тестируется локально и если всё ок - вываливаю на production. 3-й месяц ни единого глюка. А всё потому, что комманда у них ограничена конкретными людьми, которые целенаправленно занимаются разработкой Yii.
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Psih
    Сделай выбор нескольких вариантов
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    [vs]
    Смеёшься? Это же PHPBB, странно что он вообще опросы делать умеет :D
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    Psih - а вот теперь попробуй переопределить СActiveForm, который надстройка на CHtml который вызывается статикой и нужный к переопределению функционал оказывается внутри CHtml. Или в процессе написания переопределения CActiveForm ты из-за того, что нужное свойство зачем-то поставили в private вынужден переносить 30-40 строчный метод вверх тупо копируя его ради замены одного символа, по сути. А уж какое шаманство пришлось делать в переодпределении, что бы ошибки валидации заключить в два DIV вместо одного... страшно смотреть.

    Или совершенно непрозрачная система assets - ибо кто бы мог подумать, что при разворачивании системы на другом хосте пачка assets будет сгенерированна заново под другим id?

    Или настолько странные недодуманности, что даже удивляешься, например, что бинд параметров в CDBCriteria прерывает цепочку. Т.е. условия в цепочке пишем, а параметры прибиндить - не догадались сделать.

    Удивляет часто встречающееся даже документации отсылка к $_POST тогда как есть request класс.

    Угнетает необходимость описывать /** @var **/ для каждого Model::model()->findByPk и т.д, но с этим еще ладно, готов смириться.

    Не нравится слишком большая вольность обращения со свойствами. Имхо, или мы работаем напрямую с гетерами/сетерами, или мы работаем напрямую со свойствами. Вызывание гетеров/сетеров прозрачно при обращении к свойству мне кажется очень неверной концепцией, потенциально генерирующий ошибки.

    Ну и фреймворк для построения активных сайтов без встроенной компоненты создания e-mailов - очень странно.

    Еще жаль, что без фильтров - с ними явно видно стадии, которые проходит приложение, вместо того, что лезть в код и разбираться. Т.е. вот такое - понятно
    Код (Text):
    1.     //$this->registerFilter(new acHandle('src/filters/DebugFilter'));
    2.     $this->registerFilter(new acHandle('filters/acUncaughtExceptionHandlingFilter'));
    3.     $this->registerFilter(new acHandle('filters/acSessionStartupFilter'));
    4.     $this->registerFilter(new acHandle('filters/acResponseTransactionFilter'));
    5.     $this->registerFilter(new acHandle('src/filters/acUserRequestDispatchingFilter'));
    6.     $this->registerFilter(new acHandle('filters/acViewPerformingFilter'));
    7.     $this->registerFilter(new acHandle('filters/acCurrentPositionFilter'));
    8.     $this->registerFilter(new acHandle('filters/acActionPerformingFilter'));
    9.     $this->registerFilter(new acHandle('src/filters/acContentPerformingFilter'));
    А такое
    Код (Text):
    1. Yii::createWebApplication($config)->run();
    нет. Особо если требуется, к примеру, сделать отдельный скрипт, но с проверкой авторизации.

    Вот в общем впечатления от Yii - приятный фреймворк, можно работать, но требует излишне много возни в доведении до ума в таких местах, в которых подвоха и не ожидаешь.
     
  6. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Я оскорблен до глубины души и ухожу в монастырь. :'(
     
  7. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Я ждал, когда ты это скажешь. ;)
     
  8. pohapecoder

    pohapecoder Активный пользователь

    С нами с:
    16 окт 2010
    Сообщения:
    63
    Симпатии:
    0
    да есть там каркас по дефолту. zf create project сделайте и увидете.
    еще бы я рекомендовл посмотреть видиотуториалы. там по шагам объесняется и как написать простейшее приложение. как исопльзовать рзличные компоненты для веб приложения. как использовать БД - модели и т.п.

    ---

    прочему drupal есть а джумлы нету в опросе?
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    MiksIr
    Насчёт CHtml и ActiveForm я честно говоря не догоняю в чем проблема, пример в студию. У меня проблем с этим не возникло вообще.

    Что касается assets, то тут явное непонимание того, что это менеджер и что assets генерируются автоматом. Весь твой CSS и JS должны лежать в другом месте и браться через assets manager оттуда. Assest менеджер отвечает за то, что если ты изменил CSS или JS файл, он автоматом сгенерирует новый под другим ID и изменения вступят в силу моментально. Тем самым assets может быть закешировано на вечно в браузере и не париться о том, что файлы сменятся. Не говоря уже о том, что к этому делу влёгкую прикручиваются Yum compressor & co, конкатенация файлов, обсфукация и прочие радости.

    Насчёт CDbCriteria пример в студию, потому что я вообще по другому делаю через массив.

    Насчёт фильтров, что они вообще делают то? В Yii по моему просто совершенно другой подход.
     
  10. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
    > Насчёт 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');
    Как думаешь, сколько времени требуется найти это решение челвоеку, который не знаком с фреймворком?
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Да приходилось делать и извращения, вроде ничё, справилсо :)

    Оно не от хоста меняется, а от времени модификации файлов. Закачал на новый сервер и ага, время модификации уже другое. Более детально ещё не разбирался (см. ниже есть ссылка на детальное описание).

    Я CdbCriteria так просто не юзаю. Насколько я знаю оно не завязано на цепочки, а вот так:
    PHP:
    1. <?php
    2. $criteria = new CDbCriteria(array(
    3.     'condition' => 'EAV.attribute = :attribute AND EAV.attribute2 = :attribute2',
    4.     'select' => 'id, attribute, attribute3',
    5.     'params' => array(':attribute' => $someval, ':attribute2' => $someval2),
    6.     'order' => 'datefield DESC',
    7. ));
    Лично для меня очень удобно и понятнее чем цепочки. Я уж не говорю об удостве сбора массива и использования array_merge :)
    Хорошо, найти не всё легко (и это больше промах документации). А вот объяснить легко почему именно
    PHP:
    1. <?php
    2. Yii::createWebApplication($config)->run();
    Два слова: Lazy load
    Этот паттерн пронизывает весь фреймворк и компоненты инициализируются при первом использовании.
    Второе - это то, что фреймворк построен для скорости, что исключает инициализацию всего и вся в начале. И слабо связанные компоненты скорости не способствуют. Однако что бы получить доступ к компонентам не всегда надо делать getComponent, большая часть стандартных компонент имеет алиасы. К примеру:
    PHP:
    1. <?php
    2. Yii::app()->request; // CHttpRequest
    3. Yii::app()->user; // CWebUser
    4. // etc...
    5.  
    У фреймворка порог вхождения далеко не "каждый идиот может разобраться". Тут без хорошего понимания ООП и определённого кол-ва упорства никуда не получится продвинуться. API Reference у фреймворка можно сказать идиальный, а вот общая документация местами упускает некоторые вещи (это в процессе устранения).

    Вот что нужно обязательно прочитать:
     
  12. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    pohapecoder
    Потому что Joomla это CMS, а не CMF. Друпал всё же для программистов, а не на конечного пользователя расчитан. CMS мы в расчёт не берём.
     
  13. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    А есть ли смысл в Prado в опросе? Это же ступень эволюции Yii, если не ошибаюсь. Автор у них один.

    Почему в опросе нет пункта "никаким"? Psih, не увлекись ты Yii, сам бы тут флейма навёл, что mysql_query() рулит, а мы все дураки. :)
     
  14. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    lexa
    Ну от mysql_query я уже давно отошел, mysqli в объектном синтаксисе уже очень давно пользуюсь :)

    Прадо убрал, пункт "никаким" добавил.
     
  15. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    cakePHP.
    Удобен. А может, просто я привык.
     
  16. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    я за ZF, он мощьный в плане возможностей, качественный набор слабо связанных компонентов, легко интегрируется ибо хорошо стандартизирован. Если бы не ZF ну даже пусть остальные Y, Sf то PHP бы как бы считался на порядок ниже языком, ну мы же с вами знает, что он хорош. Это я так просто...
     
  17. shurastik

    shurastik Активный пользователь

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
  18. alexey_baranov

    alexey_baranov Активный пользователь

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    Я тоже скажу. Обошел весь инет в поисках удобных классов на тему mail, ldap, date, auth, session, config, log, autoload, registry, убил на это тонны времени, потом писал еще кучу враперов над этим делом, чтобы добавить исключения. Никому не советую поступать так же, потому что потом в один прекрасный момент все, что написал, нашел в Zend_Framework только даже там все выполнено еще добросовестнее. Как бы без халтуры. Там уже все ООП и уже все на исключениях. Про Zend МВЦ ничего не буду говорить, он у меня свой (в сто раз лучше чем любой фреймворковский). Но библиотечные классы там на пятерочку! Может где-то в симфони или Yii они еще лучше сделаны, я в др. фреймворках прикладные библиотеки не изучал, но если честно сомневаюсь.

    Кстати, как вы считаете, если отбросить мвц и орм из фреймворков и оставить только прикладные повседневные классы в ZF они написаны лучше чем в других фреймворках?

    ps: мой голос за ZF
     
  19. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    alexey_baranov
    Ну где как. В Yii к примеру не всё есть, но у Yii есть расширение, которое добавляет autoload для Zend фреймворка и он туда встаёт как родной. ИМХО, Yii + ZF как библиотека классов просто замечательнейшая комбинация, без которой своё программирование уже не представляю :)

    MVC у Yii лучше - легковестное, простое и очень быстрое.
     
  20. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Psih
    А если его в двух словах описать?
     
  21. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Dagdamor
    В использовании помоему не отличается общего стандарта, просто сама реализация легковестная.

    Вписал роут в конфиг файл, создал контроллер и в нём actionNameOfTheaction и всё - works.
     
  22. Fenec

    Fenec Активный пользователь

    С нами с:
    1 ноя 2010
    Сообщения:
    5
    Симпатии:
    0
    Из того, с чем работал:
    . ZF: подробные доки и крупное сильное коммьюнити, здоровая библиотека. Еще из плюсов - часто используется.
    . Kohana: очень быстро работает, хороший код. Но мало доков, встроенная ORM не очень удобна.
     
  23. nano

    nano Активный пользователь

    С нами с:
    18 фев 2011
    Сообщения:
    4
    Симпатии:
    0
    Доброго времени суток. У меня такой вопрос:

    Мне нужно разработать базу данных и систему управления её(добавление, удаление, вывод данных) для учебного заведения, в которой будет информация о преподавателях. Там будет около 6 таблиц, в сумме до 1000 записей. Объёмы данных не очень большие. Я решил что это будет PHP/MySQL. И вопрос... на каком фрамеворке делать: drupal или zend framework?
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    друпал это сайтоскелет

    вам тут вобще ничего не надо. но друпал можно заюзать если очень хочется - надо же чем-то странички выводить
     
  25. nano

    nano Активный пользователь

    С нами с:
    18 фев 2011
    Сообщения:
    4
    Симпатии:
    0
    Ну в смысле написать как модуль для друпала. Там уже есть структура, ImageAPI, FormAPI, авторизация уже есть...