Symfony: как начать

    Чем больше я работаю над своим первым проектом на работе, тем больше мне хочется в нем поменять и тем больше я жалею о том, что перед началом работы я не прочитал до конца «The Definitive Guide to Symfony» и не изучил плагины для Symfony. Многие из них мне бы помогли намного сократить время разработки и, что самое главное, не думать о том, как красиво реализовать те или иные вещи… И еще одно — если у вас уже есть кусок системы (как это было у меня), который вы собираетесь переписывать с использованием вашего фреймворка (или просто переписывать, потому что код вам не нравиться) — то мой вам совет — потратьте время на то, чтобы спроектировать этот кусок на план вашей новой системы, не бросайтесь сразу всё переписывать (каюсь, я поступил именно так), так как после анализа (который, возможно, займет у вас не один день, и даже не одну неделю), возможно, от предыдущей архитектуры системы не останется и следа.
    Вообще, я люблю проектировать, продумывать, анализировать те или иные решения, которые хочу внедрить в систему (хотя, признаюсь, опыта у меня в этом маловато), но как обьяснить заказчику, что ты провел день в раздумьях… Эх…
    Ну ладно, это я отвлекся. Сегодня хочется рассказать о том, с чего стоит начать при разработке системы с помощью Symfony и каких правил следует придерживаться.

    Собственно, всё начинается с создания проекта (project) и приложений (applications) в нем. Как это делается — можно почитать в книжке (ссылка приведена выше), а мне бы хотелось остановиться на обьяснении того, что такое проект и принципах выбора приложений в нем — какие им дать имена, как их структурировать и т.д.

    Проект


    Насколько я понял, в общем случае предполагается, что проект у вас будет один на весь сайт, и он будет представлять собой некое хранилище приложений, конфигурационных файлов и моделей, которыми будут пользоваться все приложения этого проекта.

    Приложения


    В отличии от Django — здесь приложение не является атомарной единицей системы, которую можно использовать в других проектах… В Symfony они созданы лишь для того, чтобы логически (ну, и физически) разграничить функциональность вашего проекта. И самое главное — приложения имеют место быть только в рамках одного проекта. Т.е. если вы в рамках проекта удалите одно приложение — другие от этого не пострадают, но вот перенести из одного проекта в другой приложение будет очень проблематично, т. к. оно зависит от настроек проекта, от модели проекта и так далее.
    Будет нелишним сказать, что официально рекомендовано (читать как «предлагается») в проекте создавать два приложения: frontend и backend (для русскоязычной аудитории термин «админка» в данном случае будет более уместен). Сам могу порекомендовать создавать приложения только для объединения модулей, которые ставят перед собой одну цель. Например, та же админка, пользовательский интерфейс (то есть, например, профиль пользователя, всё, что пользователь может изменять на сайте) и frontend (всё, что доступно всем).
    Сам я пользуюсь рекомендацией книги и имею два приложения в своем проекте.

    Плюсы и минусы такого подхода мне рассматривать не хочется. Скажу лишь, что для меня Django’вский подход гораздо более удобен и логичен, и вот эти проекты/приложения для новичка выглядят достаточно сложно и непонятно, в большинстве случаев новички просто слушаются рекомендаций книги, не совсем понимая, что это и зачем это нужно. Я бы на месте разработчиков Symfony подумал бы о пересмотре этого подхода, особенно, если учитывать, что плагины в Symfony — это по сути те же Django apps, но об этом несколько позже.

    Окружения (environments)


    Останавливаться на окружениях особенно не хочется. Это очень удобный, но в то же время очень простой механизм, обеспечивающий возможность заходить в одно и то же приложение с различными серверными настройками. Если сказать проще — представьте себе, что у вас есть приложения и галочка, которая переключает режим его работы в debug-mode и обратно. В debug-mode, например, все события логгируются, все ошибки выводятся на экран и т.д. Если же debug-mode выключен — все логи выключены, и на экране никогда никаких ошибок появляться не будет. Так вот — в Symfony вместо флага debug/не-debug имеется просто несколько различных окружений, каждое из которых можно настроить ПОЛНОСТЬЮ, т. е. не система решает — что включить, а что выключить, а вы сами. Хочется также отметить, что особо копаться в настройках вам не прийдется — по умолчанию для каждого приложения создается 3 environment’а: production, development, testing (используется исключительно при тестировании).
    В общем, тут придраться не к чему — всё, на мой взгляд, просто идеально.

    Модули (modules)


    … содержат в себе контроллер с действиями и представления (т.е. MV из MVC), а также конфигурационные файлы и, возможно, библиотеки, нужные только в этом конкретном модуле. Тут всё достаточно просто и понятно.

    Модули (как и приложения с проектом) можно создавать автоматически (и помощью командной строки). Кроме создания простого модуля можно создать (опять же — автоматически) CRUD (Scaffolding) для одной из таблиц, либо админку (опять же, для одной из таблиц). Админка отличается тем, что никакого кода писать практически не нужно — почти всё в ней (фильтрация, сортировка и т.д.) настраивается с помощью конфигурационного файла, что ОЧЕНЬ удобно (привет джангистам, они поймут). CRUD же очень полезен при начальных стадиях разработки. Пример — добавили вы таблицу пользователей, теперь вам нужно: выводить список пользователей, позволять им редактировать свой профиль и регистрироваться. Вместо того, чтобы всё писать с самого начала — создаем CRUD-модуль для таблицы пользователей, а потом уже можно начинать писать свой код, основываясь на уже сгенерированном. В неявный плюс такого решения можно отнести то, что коды модулей получаются похожими друг на друга и путаницы возникает меньше.
    Последнее, на чем хотелось бы остановиться — это…

    Модели (models)


    Все модели хранятся в одном (или нескольких) YAML-файлах. К написанию моделей привыкаешь за 3—4 дня. Из YAML модель с помощью одной комманды преобразуется в автоматически сгенерированные базовые классы ORM (Propel или Doctrine). Всё быстро, просто и аккуратно.

    Пожалуй, это всё, что может понадобиться новичку при изучении Symfony (чтобы она не казалась ему какой-то сложной и непонятной системой, какой она мне показалась год назад).
    А вот теперь перейдем непосредственно к моим рекомендациям. Но перед этим я расскажу вам про…

    Плагины (plugins)


    Плагины — это, по сути, тот код, который может быть использован несколько раз в разных проектах и приложениях. Плагины могут содержать:
    • конфигурационные файлы, в том числе свои модели (!!!)
    • модули
    • библиотеки

    Я могу оказаться не прав, но как мне кажется, плагины — это такие себе мини-проекты, «всё в себе», чем выгодно отличаются от Symfony applications. На мой взгляд, ставку стоило делать в первую очередь на них — убрать приложения, а вместо них поставить плагины и создать некий инструмент, который бы позволил эти плагины связывать между собой.

    Мои рекомендации


    • В первую очередь — проектирование. Не скупитесь на этом шаге, анализируйте и уточняйте у заказчика непонятные пункты.
    • Видя перед собой (да хоть в уме) макет системы — продумайте, на какие части систему можно разбить.
    • Поищите среди существующих плагинов такие части (обязательно). Я в своем проекте использовал следующие плагины:
      • sfGuardPlugin — user management, security и т.д. Плагин — must have.
      • sfDateTimePlugin — очень удобная работа с датами и временем
      • sfPropelAlternativeSchemaPlugin — полезен при работе с плагинами, позволяет менять модели, прописанные в плагинах, не изменяя коды самих плагинов
      • sfPropelApprovableBehaviorPlugin — мне очень пригодился при «активации пользователей»
      • sfThumbnailPlugin — уменьшение картинок (не смотрите на название — с ресайзом 3MP-фотографий к 800×600 плагин справляется на отлично)
      • sfPropelActAsTaggableBehaviorPlugin — если вам нужны тэги
      • sfPropelActAsSluggableBehaviorPlugin — если вам нужны slug’и (а я советую их использовать — очень хорошо сказывается на читаемости url’ов, когда вместо id туда засовывать slug’и)
      • sfPropelActAsRatableBehaviorPlugin — рейтинги, довольно крутые, мне, к сожалению, не подошли…
      • sfPropelActAsCommentableBehaviorPlugin — всё, что нужно для комментариев


    • Используйте в работе автоматически генерируемые CRUD-модули и модули для админки


    Ссылки по теме




    Вот, пожалуй, и всё на сегодня. Жду ваших комментариев.

    Кросспост на моем блоге.
    Поделиться публикацией

    Похожие публикации

    Комментарии 87

      +2
      Статья хорошая, но я хотел бы добавить к этой статье ссылку на перевод книги «Полное руководство по symfony». Поможет, если останутся вопросы.
        +2
        Там не самый полный перевод. Вот я тут ссылочек немного собрал, там есть полнее переводы.
          0
          Добавил раздел "Ссылки по теме".
            –1
            по вашей ссылке не "полное руководство" а только первые четыре главы.
            а здесть шесть глав, и перевод мне кажеться более "правильным"
            http://developer.co.ua/posts/view_tag/sy…
              0
              А может научимся по ссылкам ходить? Вот самый полный вариант перевода...
            +1
            спасибо, отличная статья; слипаются глаза, почти 3 ночи, а я сижу устанавливаю =))
              +1
              Пожалуйста. Я думаю, это не последняя моя статья про Symfony. :)
                0
                Здесь им будут очень рады ;)
                Кстати, проверьте карму :)
              0
              Возможно, стОит упомянуть, что структура проекта скопипастена из Rails. В принципе, в ней есть как плюсы, так и минусы, но четкая структурированность файла и областей видимости классов оччень помогает.
              Алсо, реквестирую специализированный блог. Ибо необходимость имхо назрела уже.
                0
                Я на знаток Symfony или Rails, поэтому хочу спросить - разве они не обычный MVC паттерн реализуют? Если нет, то в чем отличие?
                  0
                  Отличий нет. MVC с поправкой на веб.
                  0
                  реквестирую специализированный блог
                  Впрочем, вот и он. Описание набросано на скорую руку, и в 3 ночи, посему поправки welcome.
                    0
                    Чего не знаю, того не знаю... Я рельсы не изучал. Мне если брать фреймворки не на PHP больше нравиться Django.
                    0
                    Вообще, я люблю проектировать, продумывать, анализировать те или иные решения, которые хочу внедрить в систему (хотя, признаюсь, опыта у меня в этом маловато), но как обьяснить заказчику, что ты провел день в раздумьях… Эх…

                    Да уж. Когда требуют что-то типа «сегодня-завтра думай, а с послезавтра — кодь и не отвлекайся», угнетает слегка. Мягко говоря.
                      0
                      Очень просто, первая стадия разработки продукта — проектирование, оно занимает 1/6 всего времени разработки. Говорите заказчику именно это, а через неделю предоставляете проект системы (схему в Visio, например).
                        +1
                        оно занимает 1/6 всего времени разработки
                        какой шустрый. в иных случаях проектирование может занимать чуть ли не половину времени разработки.
                        но не в этом дело... всё равно заказчики "проектирования" не понимают...
                      +1
                      Автору - респект и уважуха. Читал посты людей об их любимых фреймворках, а сам все думал - неужели никто про Симфони не слышал?! А вещь - более чем перспективная. Сам я начинающий, пока в стадии прочтения их книги и степ-бай-степ приложения.. Вообще круто, автор, пиши еще!
                        0
                        Пасиб. Постараюсь. :)
                        0
                        Собственно, гордитесь, своё дело вы сделали... помогли мне с выбором первого фреймворка :) буду изучать что есть фреймворк начиная с Symphony.
                        P.S. Плюсик поставил ;)
                          0
                          Простите, Symfony :P
                          0
                          fxposter, да и все кто здесь, може привести примеры проектов организованных с помощью Symfony?
                            +2
                            Русскоязычных проектов на ней очень мало. Я вообще смотрю, что в Рунете про Symfony вообще практически ничего не говорят. А зря...
                            А ссылки вот: Applications Developed With Symfony и Symfonians.
                              0
                              мы вот активно пользуем. хоть и не афишируя, что используется именно Symfony.
                                0
                                у меня сайт в профиле на симфони например ;) Сначала плевался от сложности системы шаблонов - партиалы, компоненты, слоты ... Но потом стало понятно, что 1. благодаря этому можно очень гибко курочить структуру шаблона от модуля к модулю (а не тупо menu, content). 2. система шаблонов и кусков кода рассчитана на ajax, при его использовании сразу становится понятно, зачем там только нагородили с шаблонами.
                                  0
                                  А у вас там отдельный сервер или обычный хостинг?
                                  Я делал один проект на симфони - на локальной машине все ок было, на хостинговой - 6-12сек простейшие страницы грузились((
                                    0
                                    Сервер. На локалке он у меня работает раз в 20 медленнее - сказывается видимо ноутбучный винт, винда, отсутствие APC.

                                    APC установлен на хостинге? Propel генерирует вагон php-кода и этим сильно тормозит симфони (видно в dev environment по потреблению памяти, да и по скорости), так что без кешера сложно.
                                      0
                                      Странно, у меня на 1.2г ноуте то же самое за 100-200мс грузилось, без ускорителей. С уск. еще быстрее.
                                      На том долбанном хостинге такого ничего нет, и не предвитится. Проблема в том, что у клиента на том хостинге 10 сайтов стоит, почта так же, поэтому на переезд он не соглашался. Я пытался сам скомпилить какой-ниб ускорятель (о, там был Зенд Оптимизер, но симфони он кажется никак не поможет), но там небыло никаких средств компиляции и стояла солярка. Я уж и в гугл-групс спрашивал, но ничего не помогло.

                                      6-12 сек. грузилось после удаления кеша,
                                      4-8 сек. - в обычном режиме.
                                      Оба замера - в продуктивном окружении...

                                      Скорей придется в чистом пхп переписывать.
                                        0
                                        Ecли у вас на странице много объектов (пару сотен), то их hydration из sql тоже может подтормаживать. + Кеширование в симфони достаточно навороченное - можно кешей наделать.

                                        В общем, не знаю :( У меня строго обратная ситуация, на локалке я плакалЪ, глядя на timer, залил на сервер - успокоился.
                                          0
                                          да там блин буквально 4 строки выводин, пара джоинов и все.
                                          т.е. тормозить по-идее с несчего (пока), но тормозит =)
                                            0
                                            Как-то странно. У нас обычный хостинг без какого-либо APC. В development environment'е на довольно "хорошей" странице Symfony показывает ~150ms. В обычном режиме, думаю, будет < 100. Так что откуда у вас там "секунды" мне непонятно. Разве что только у вас Windows-хостинг.
                                          0
                                          sfOptimizerPlugin — не совсем то, конечно, но для продакшна очень неплох. Собирает все классы из autoloading'a в один файл, благодаря чему autoload handlers не вызываются вообще и, как следствие, не выполняется обход каталогов */lib в поисках нужных классов. Ну и да — APC обязателен, конечно же.
                                    –1
                                      –1
                                      Что-то линк "съелся"
                                      jobterra.com - поиск работы и подбор персонала
                                        –1
                                        Такое впечатление будто на сайте просто решили показать возможности Symfony... ничего больше.
                                          –1
                                          Этот комментарий предназначался пользователю zakon и был примером простого проекта на symfomy (этот проект, кстати, позволит ознакомиться с возможностями symfomy и Вам тоже). Почему простого? Потому, что наиболее посещаемые сайты для поиска работы изобилуют функциями, использование которых может поставить в тупик пользователей с низкой квалификацией. Указанный проект - желание сделать сложные вещи проще. Я осознано не стал "раздувать" меню и "накачивать" страницы графикой. Небольшое число ссылок позволяет пользователю быстро найти нужную функцию, а минимум графики - экстремально повышает скорость загрузки страниц (результаты сравнительных тестов можно найти в блоге).

                                          symfony - мощный и сложный framework. Не зря считается, что в него довольно тяжело "входить". Если у читателей возникнут вопросы по symfony, буду рад на них ответить.
                                        0
                                        Из интересного: Yahoo! Bookmarks и LionPages
                                          0
                                          0
                                          Перенес статью в блог Symfony.
                                            +2
                                            Замечание:
                                            "Все модели хранятся в одном (или нескольких) YAML-файлах. К написанию моделей привыкаешь за 3—4 дня. Из YAML модель с помощью одной комманды преобразуется в автоматически сгенерированные базовые классы ORM (Propel или Doctrine). Всё быстро, просто и аккуратно."

                                            Насколко я понял тут вы говорите о схемах, а не о модели. Уровень модели не может быть в YAML'е, так как модель это выполняемый код. Наверное не стоит говорить, что под моделью нужно всё-таки понимать всё то, что хранится в lib/model/

                                            А за статью спасибо. Полгода работаю с Симфони, и знаете, так приятно увидеть на Хабре знакомое слово :)
                                              0
                                              Извиняюсь, если не совсем понятно выразился. Имелось ввиду "описание моделей".
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                0
                                                Сравнение Cake, Solar, Symfony, Zend:
                                                http://paul-m-jones.com/blog/?p=238

                                                Тесты CodeIgniter, Symfony, ROR, Django:
                                                http://www.alrond.com/ru/2007/jan/25/rez…
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                    0
                                                    Субьективно, Symfony - это лучшее из того, что я видел на данный момент из PHP-фреймворков. По скорости - средний (но офигенная система кеширования должна этот недостаток вполне себе скрыть). По гибкости - настроить тут можно практически всё, причем настраивать можно как на уровне приложений, так и на уровне отдельных модулей и даже action'ов.

                                                    Пробовал я CodeIgniter и CakePHP. CI хорош тем, что быстрый (хотя опять же - это дело поправимое) и легкий в изучении. Я сам Symfony где-то год назад для себя открыл, попробовал, и... сказал себе - "нет, это не для меня. слишком сложно...". Прошел год, многое поменялось, я немного повысил свою квалификацию :))) и теперь мой выбор - Symfony.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                  0
                                                  Я смотрю, вы постоянно сравниваете с Django, видимо раньше пользовались им?
                                                  Symphony нравится больше или просто захотелось попробовать что-то другое?

                                                  Я пока пользовался только cakephp и Zend framework. Сейчас в раздумьях, что попробовать следующим: Джанго или симфони. Или вообще рэилз...
                                                    0
                                                    Скажем так - я его изучал (Django). Реальных каких-то приложений делать не пришлось. А с Symfony я потому, что работаю PHP-программистом, поэтому и выбирал исключительно из PHP-фреймворков.

                                                    Насчет того, что выбрать - если нет ограничений на язык - я бы попробовал Django или RoR (конкретнее - лучше выбирай сам, тут уже кому что нравиться). Если же желательно всё же остаться на PHP - можешь попробовать Symfony, но при этом про ZF не забывай.
                                                    +2
                                                    Советую людям, пишушим на симфони, внимательно присмотреться к Doctrine в качестве замены Propel.

                                                    Пропел на сложных моделях (большое количество связей многие-ко-многим, сложные джойны, сложные условия) сильно затрудняет разработку, вместо того, чтоб ее облегчать. Doctrine со своим языком DQL гораздо более гибок.

                                                    Посмотрите хотя бы на Propel Criteria builder. Там в качестве примера в форму уже вставлен не очень сложный запрос — однако в виде Criteria он занимает 11 (!!) строк кода. По-моему, это неприемлимо.

                                                    Doctrine — куда более зрелый ORM, чем Propel. У него есть нормальная документация, он поддерживает кэширование (в том числе через memcached), наследование (4-мя разными способами), шаблоны классов, транзакции — те вещи, которые в Пропеле не реализованы вообще или реализованы совсем слабо.

                                                    Кстати, интересно заметить, что Doctrine - PHP-клон Hibernate (ORM на Java), Propel - клон Apache Torque (тоже ORM на Java). Насколько мне известно, люди, пишушие на яве, в основном пользуются Hibernate-ом, что тоже о чем-то говорит.
                                                      0
                                                      По-моему, это неприемлимо.
                                                      Вполне приемлемо. Не передергивай. :)

                                                      Да и вообще - слишком рано ты затронул эту тему. Это отдельный и довольно долгий разговор. Вот здесь я немного писал о Propel'е и сравнивал его с Doctrine'ой... Да, Доктрина гибче, функциональнее, но и... тормознее.
                                                        0
                                                        Есть и еще причины выбрать именно Propel - лучшая интеграция с Symfony, наличие очень многих дополнений (в частности, Behavoir'ы), а также то, что большая часть плагинов Symfony ориентирована именно на Propel...
                                                          0
                                                          По поводу Behavior-ов: в Доктрине есть реализация Nested Set, а также Class Templates с набором готовых шаблонов. Ну, плагины, ориентированные на пропел - да, тут сложно поспорить. Хорошо, что хотя бы sfGuard портирован. Остальные в общем-то не так уж и нужны (либо не используют пропел).
                                                            0
                                                            Ну вообще еще хотелось бы Blog и Forum плагины... SimpleCMS, насколько я помню, уже существует...

                                                            Есть и еще один бок - официальная поддержка. Многие плагины работают совсем не так, как хотелось бы. Некоторые вообще имеют явные баги... Вот если бы Symfony полностью перешла на doctrine - я бы был ОЧЕНЬ рад, а пока - использую Propel.

                                                            PS. Еще одно - у меня на хостинге проектном нет PDO_MySQL... ПОэтому Propel'овская Creole пришлась весьма кстати.
                                                        0
                                                        По ссылке в блоге написано почти то же самое, что и я написал :)
                                                        А 11 строк кода, чтобы реализовать запрос в полторы строчки я не знаю как еще охарактеризовать, по-моему, "неприемлимо" — вполне подходит :)
                                                        На самом деле проблема Propel-а (ну и Apache Torque тоже, соответственно) в том, что они пытаются совершенно абстрагироваться от базы данных, чтобы программист работал только с объектами. А такой подход работает только для простых моделей, потому что реляционные БД и ООП - это все-таки сильно разные вещи.
                                                        Тормознутость доктрины (что, впрочем, спорно, я сам никаких сведений на эту тему не имею) компенсируется поддержкой кэширования, например.
                                                          0
                                                          Ну не знаю, у меня в проекте пока таких длинных работ с Criteria делать не приходилось.
                                                          Hint: у Criteria реализован chaining: $c-add()->add()... И никаких 11 строк не будет.

                                                          Насчет тормознутости: получите и распишитесь. :)
                                                            0
                                                            Кстати хинт, чтобы были объекты, но не было длинной и мутной критерии:

                                                            $con = Propel::getConnection();
                                                            $query = "SELECT user.* FROM ".UserPeer::TABLE_NAME." WHERE xxx";
                                                            $stmt = $con->createStatement();
                                                            $rs = $stmt->executeQuery($query, ResultSet::FETCHMODE_NUM);
                                                            return parent::populateObjects($rs);
                                                              0
                                                              Это прикольно, но не прокатит с джойнами, т. к. прогидратируется только первая таблица :)
                                                            0
                                                            Если ты еще не понял - я не спорю, что доктрина сама по себе лучше (хотя и прилично тормознее, опять же). Я спорю с тем, что она лучше в использовании с Symfony.
                                                              0
                                                              Согласно вышеприведенной ссылке разница в быстродействии с Пропелом незначительная — 6-7 против 9 — это даже не в два раза разница. То есть если скорость работы ORM станет ограничивающим фактором при быстродействии, то замена Доктрины на Пропел не спасет совершенно, придется применять какие-то радикальные меры, вроде кэширования.

                                                              Вот, и учитывая, что деньги, сэкономленные на времени разработки при использовании Доктрины, явно перевешивают деньги, затраченные на небольшое замедление работы, зачем спорить, что Доктрина лучше с Симфони? :)
                                                                0
                                                                Посмотри вторую ссылку. И ты поймешь, что там не "незначительно", там отрыв пропела в 1.5-2 раза, причем если работать с большими обьемами данных Doctrine еще и жутко просаживается вплоть до отказов.

                                                                > зачем спорить, что Доктрина лучше с Симфони?
                                                                Затем, что Propel быстрее, и затем, что куча плагинов заточена именно под Propel.
                                                                  0
                                                                  Если так рассуждать - кодеигнитер вообще в разы быстрее чем симфони с пропелом. Почему же ты тогда все равно выбрал симфони?

                                                                  Я хочу сказать, что скорость исполнения не всегда должна быть решающим фактором при выборе инструмента. В каких-то случаях это оправдано, конечно (во всяких системах с высокой нагрузкой), но чаще выгоднее использовать инструмент, экономящий время разработки и потом уже при необходимости оптимизировать скорость (кэшированием, акслераторами и т.п.)
                                                                    0
                                                                    Ну тут согласен :) Но вот с интеграцией всё же не все в порядке...
                                                          +1
                                                          > Doctrine — куда более зрелый ORM, чем Propel
                                                          Как же он может быть зрелым, если еще осенью там ничего толком не было кажется, одни беты и to do. Не понимаю.
                                                            –1
                                                            Ну, например, об этом говорит тот факт, что в свн у доктрины последняя ревизия - 3892, а у пропела - 978. Вообще, я неправильно выразился, наверное. Я имел в виду, что она функциональнее и ближе к полноценному ORM, чем Пропел, и что разработка Доктрины ведется активнее.
                                                              0
                                                              Доктрина гораздо (sic!) моложе Propel'а. ;)

                                                              PS. А судить по количеству коммитов в svn про зрелость проекта - не самый лучший способ.
                                                            0
                                                            Я на свой первый проект ставил Doctrine, но работать довелось с Пропелом. Согласен, основыне минусы Propel - отсутствие PDO, длинный код, неудобные запросы через критерии (каждый раз при сложном запросе нужно смотреть в справочник), кеширование объектов я писал сам.

                                                            А вообще чтоб полностью и безболезненно перетйти на Доктрину нужно дождаться пока разработчики добавят промежуточный ORM-уровень. В задачах для Google Summer Code это есть, и я надеюсь у них получиться.
                                                            0
                                                            Большое спасибо, ценный материал. Как раз собираюсь с CakePHP переходить на что-то более разумное.
                                                              0
                                                              Всегда пожалуйста :)
                                                              0
                                                              Хотелось бы увидеть сравнение с Zend Framework. Я сейчас его использую.
                                                                0
                                                                Нет, этого не будет. Т.к. я на данном этапе развития ZF слабо представляю его как фреймворк. Это библиотека, а не каркас, ИМХО.
                                                                  0
                                                                  А вот отдельные компоненты ZF вполне можно использовать с любыми фреймворками.
                                                                    0
                                                                    В том же Симфони реализован бридж на Зенд :)
                                                                  0
                                                                  По поводу разделени проект/приложение.

                                                                  По поводу разделения на проект / приложение хочу сказать что проект это вовсе не обязательно один сайт! Это может быть многосайтовый движок работающий на одной базе. В этом случае для каждого сайта разумно делать отдельный frontend-application а вот backend-application лучше наверное сдлеать один.

                                                                  По поводу модулей.

                                                                  > … содержат в себе контроллер с действиями и представления (т.е. MV из MVC),

                                                                  VC вообще-то.

                                                                  По поводу скаффолдинга - мне лично непонятно зачем генерить CRUD на начальных стадиях развития проекта, по мне так лучше сразу юзать Symfony admin generator.


                                                                  А так, в целом, статья понравилась. Всё грамотно, коротко и по делу.
                                                                    +1
                                                                    Ошибся, там MVC, а не MV.

                                                                    по мне так лучше сразу юзать Symfony admin generator.
                                                                    А потом всё пытаться подстроить так, как нужно? Времени уйдет больше, чем разрабатывать с нуля.
                                                                      0
                                                                      > Ошибся, там MVC, а не MV.

                                                                      Если быть совсем уж точным, то в модулях содержится часть View и часть Controller.
                                                                      Но это не принципиально. А по поводу скаффолдинга - я всего лишь высказал своё мнение потому как мне так удобней.
                                                                        0
                                                                        >...по мне так лучше сразу юзать Symfony admin generator.
                                                                        >А потом всё пытаться подстроить так, как нужно? Времени уйдет больше, чем разрабатывать с нуля.

                                                                        Не согласен, уж очень мощно настраивается генератор админки в симфонии.
                                                                        Необходимо потратить время на изучение всех опций, которые в книге описаны далеко не все.
                                                                        Конечно же не каждый функционал админки можно привязать к той или иной табличке БД.
                                                                        Но и в этом случае ИМХО стоит воспользоваться генератором, хотя бы ради каркаса.
                                                                      0
                                                                      sfproject.ru лежит уже неделю как минимум
                                                                        0
                                                                        А что ты там хотел? Ничего интересного там, в принципе, нет.
                                                                        0
                                                                        Symfony - достаточно интересный и гибкий инструмент. Но что за этим скрывается? - Тормоза.... Время для генерации элементарных страниц достигает катастрофических величин. К тому же, господа, если вы хоть на секунду задумываетесь об енкодинге(криптовании) своих php проектов такой утилитой как ZendGuard к примеру, то забудьте о Symfony. Она в криптованом виде работать не в состоянии. А все из за ее дибильного php кэша :). Без которого она воще работать не может, даже если его отключить.
                                                                        Так что удачи Симфонисты.... А вот ZF зря опускали, очень рульная вещь, но конечно телодвижений надо делать побольше, и хотя он и молодой фреймворк, но объектная модель уж куда покруче чем симфони.
                                                                          0
                                                                          Время для генерации элементарных страниц достигает катастрофических величин.
                                                                          Акселераторы и кэширование еще никто не отменял.
                                                                          если вы хоть на секунду задумываетесь об енкодинге(криптовании) своих php проектов ... то забудьте о Symfony
                                                                          Это да. Забудьте.
                                                                          ZF ... очень рульная вещь
                                                                          Набор кирпичей. Не больше. Я бы даже сказал — пазл. И уж точно не framework как каркас приложения, каковым он должен быть.
                                                                          но конечно телодвижений надо делать побольше
                                                                          это очень мягко говоря. Аналогов тому же admin generator'у я вообще в природе не встречал (кстати, приведите примеры плз, кто знает).
                                                                          объектная модель уж куда покруче чем симфони
                                                                          очень спорно, согласитесь.
                                                                            0
                                                                            > Время для генерации элементарных страниц достигает катастрофических величин

                                                                            Первый запуск, когда все-все-все конфиги парсятся, а не тянутся из кэша, когда незакешированы темплэты это конечно да, жесть. Но возможности улучшение производительности очень существенны - в книге целая глава об этом написана. Ну и самое главное - реальный практический пример двух проектов Yahoo, написанных на Symfony.
                                                                            0
                                                                            Спасибо большое за статью.
                                                                            Сейчас стою на распутье и решаю какой фрейморк выбрать. Вот думаю с симфони и останусь, сообщество большое, написано много про него, плагины и прочие полезности.
                                                                            Еще раз спасибо.
                                                                              0
                                                                              два приложения: frontend и backend (для русскоязычной аудитории термин «админка» в данном случае будет более уместен).

                                                                              Забавно… а я то думал что fronted это всякие там шаблоны (вывод страниц, то что видно в браузере), а backend это скрипты… к примеру вычисление того что выдать в качестве контента в fronted…
                                                                                0
                                                                                Документация по Symfony 3 на русском
                                                                                symfony.com.ua

                                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                Самое читаемое