Как стать автором
Обновить

Отчет по Symfony 2 Online Conference

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

Доклады


«Miscellaneous enhancements» Fabien Potencier
http://www.slideshare.net/fabpot/news-of-the-symfony2-world

Доклады слегка передвинули и первым начал Фабьен с вводной о разных нововведениях.
  • Представил принципиально новый парсер DOM, который поддерживает все css3 селекторы.
       Parser::cssToXpath('h4 > a:contains("foo")');
    Этот парсер является основой для другого компонента — DomCrawler.

  • DomCrawler
    см. презентацию как он выглядит и работает.
    В первую очередь, этот краулер используется в функциональных тестах, для работы с «ответом»: выбрать элементы по условию, найти и заполнить форму и пр.
    Мы получаем полный и удобный доступ к дереву, нодам и их аттрибутам.
    Фабьен представил пример простого браузера на основе такого краулера.

  • Finder
    Продвинутый итератор для работы файлами: выбрать список файлов по маске, отфильтровать, отсортировать. Возвращает файлы в виде объектов с атрибутами.
    Подробнее см.
  • Kernel
    Ядро фреймфорка. Простой интерфейс — 2 метода принять запрос и отдать ответ.
    Такая простота позволяет писать свои «ядра», куда можно зашивать любую логику, которая обернет «запрос» и «ответ». Можно писать свои решения для тестирования, профилирования, кеширования и пр.
В конце Фабьен предупредил всех, что фреймворк находится в стадии активной разработки, и что он не гарантирует стабильность API. «Мы будем добавлять новый код, удалять существующий, активно рефакторить, но главное, философия симфони останется неизменной».
То что сейчас выложено и работает — это превью-релиз. Первую альфу планируется выложить в сентябре.


«Symfony 2 Meets Propel 1.5» François Zaninotto
http://www.slideshare.net/francoisz/symfony2-meets-propel-15-4

Франсуа представил новую версию, рассказывал насколько она хороша и лучше предыдущих версий пропеля. Но ощущалась какая-то неуверенность в светлом будующем этой ORM.
Нам представили новые «киллер-фичи»:
  • Model query
    Отказались от «критериев» и теперь запросы пишутся похожим образом как в доктрине, только в другой парадигме.
    Оригинально выглядят джойны. А если учесть, что вместо пиров/таблиц мы работаем с query, тогда довольно симпатично можно разнести логику (написать свои фильтры) по соответствующим query и избавиться от дублирования в запросах.

  • Concrete Table Inheritance
    Реализовали наследование моделей от одной таблицы. Что-то похожее есть у доктрины.
    Правда, мне не понравилось решение, когда при сохранении объекта данные записываются в конкретную таблицу и дублируются в родительской. Так и не понял зачем.
    В прочем, дублирование можно отключить. см. доку.
    В доктрине мне больше нравится Column Aggregation Inheritance. Когда все записи лежат в одной таблице, где есть колонка с типами объектов. Когда мы выбираем список объектов, мы получаем коллекцию из разных типов. И на каждый тип мы можем повесить свою бизнес-логику.

  • Aggregate Column Behavior
    Автоматическое обновление колонки, которая содержит результат выполнения агрегирующей функции, при изменении зависимой таблицы. Т.е. автоматом считает/кеширует кол-во комментариев у поста, суммы, максимальные и минимальные значения. См. доку.
    Честно говоря, мне не очень нравится такой подход с точки зрения надежности. Впрочем, все как всегда зависит от условий задачи.
И в целом:
  • «The Power of Propel Generator»
  • «Propel not dead»
  • «Propel vs Doctrine»
И под конец, Франсуа как то неопределенно высказался о будущем пропеля в Symfony2, и перевел все на Фабьена.


«What's new in the Doctrine 2 Symfony Integration» Jonathan Wage
http://www.slideshare.net/jwage/symfony2-and-doctrine2-integration

Что у нас есть:
  • Doctrine 2 — это не Active Record. Поздравляю всех последователей доменной модели. Теперь мы можем писать свои объекты бизнес-логики. Ни от кого не наследуем, собственный конструктор, никакой магии. А работу с БД поручаем EntityManager.
    Наши объекты могут содержать в себе данные не только в ввиде простых типов, но и в виде других объектов. Т.е. мы можем написать сложные типы данных, такие как валюты, интервалы дат и пр и нативно гидрировать их из БД.
    Можем написать персональный EntityManager со своими правилами работы с БД и гидрации объектов.
    В общем, намного больший простор по сравнению с Active Record.

  • Миграции
    Все переписали и сделали этот компонент независимым. Теперь вы можете использовать миграции для любых своих проектов.
    Из того, что не видел в 1.x:
    — посмотреть текущий статус — какая сейчас версия и пр.
    — показать sql миграции
    — записать sql миграции в файл

  • MongoDB
    Разработчики добавили поддержку MongoDB и вынесли в отдельный подпроект. Интересно будет попробовать.
Но, в целом доклад получился каким-то сумбурным и хаотичным. Временами народ отключался.


«Unit & Functional Tests» Fabien Potencier
http://www.slideshare.net/fabpot/unit-and-functional-testing-with-symfony2
  • С выходом Symfony2, я думаю, тестирование symfony-проектов выйдет на новую ступень. Станет более удобным и прозрачным. Долой контекст и мемлики!
    В функциональных тестах мы тестируем только «output». Формы, валидацию и все, что можно, мы тестируем в юнит-тестах. И скорость выполнения тестов, я надеюсь, сократится.
    Фабьен показал пример функционального тестирования в связке:
       Client (браузер) - Crawler (DOM) - Assert (phpunit)
    см. презентацию.

  • Запросы к приложению можно запускать в отдельных процессах. Т.е. в одном тесте сделать 2 условно одновременных запроса. Только я не совсем понял зачем. Это все-таки функциональные тесты, а не нагрузочные.

  • Теперь этот компонент не зависит от симфони-приложения и его можно использовать для тестирования ЛЮБЫХ web-приложений. Потому что он может как симулировать запрос к симфони-приложению, так и честно ходить по http.
    Поэтому, если у вас не симфони-приложение или есть унаследованный код, его можно покрыть этими тестами, и в случае переноса на симфони, эти тесты не придется переписывать.

  • Еще понравилась возможность в тестах получить доступ к профайлеру/статистике, чтобы протестировать, например, кол-во запросов к БД, время выполнения контроллера и пр.

«The new form framework» Bernhard Schussek
http://www.slideshare.net/bschussek/the-new-form-framework

Опять все переписали.
Теперь формы — это только визуальное представление. Вся валидация хитро вынесена в модель, см. презентацию.
Главный вопрос, который у меня возник: «А как быть с кастомными формами?».
А вот как:
  • правила валидации можно группировать и отдавать в форму определенную группу (с частью полей, с отдельными правилами)
  • для кастомной формы пишем персональный класс-модель, где указываем соответствующие правила валидации
В целом любопытно, надо пробовать и смотреть что получается.
Но, как минимум, тестировать уже будет намного проще.


«The Symfony 2 Killer Feature...» Fabien Potencier
http://www.slideshare.net/fabpot/caching-on-the-edge-with-symfony2

Как вы уже могли догадаться — это кеширование.
Symfony2 представляет совершенно новый взгляд на кеширование, а бенчмарки показывают вообще запредельную разницу. А суть в RFC 2616 (13. Caching in HTTP).
Во первых, в контроллере мы указываем время жизни кеша и response формирует соответствующие http-заголовки. На первый взгляд в этом нет ничего революционного, если бы не встроенный HTTP-прокси. Который оборачивает ядро приложения и управляет кешированием и не пускает запросы в приложение, если у него есть кеш.
Для партиалов, которые должны кешироваться на разное время, используется технология похожая на SSI, где соответствующий партиал подключается и обрабатывается отдельно в соответствии со своими настройками.
А если еще поверх этого поставить реверс-прокси, типа nginx, тогда за счет заголовков кеширования запросы до приложения вообще не дойдут.

Управлять кешом рекомендуется через время «протухания». Но также можно инвалидировать конкретные URL.


Все.
Организаторы, как обещали, выложили новую доку с описанием отдельных компонентов.
В итоге: Symfony2 — это принципиально новый фреймовок, не только по сравнению с 1.x, но и вообще по сравнению с другими php-фреймворками. Впереди еще очень большая работа, но главное, Symfony2 — это уже реальность. Присоединяйтесь!

Пропиарю русскую рассылку. Не скажу, что она довольно активна, но, я думаю, что это неплохая точка сбора. Там я буду анонсировать все свои инициативы, такие как, например, встречи на «Symfony code'n'coffe».
Теги:symfonysymfony2
Хабы: Symfony
Всего голосов 20: ↑18 и ↓2 +16
Просмотры1.1K

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

Symfony-разработчик‌
от 80 000 до 150 000 ₽Like ЦентрМожно удаленно
Fullstack разработчик (Symfony / Vue.js)
от 130 000 до 220 000 ₽ПродуманМожно удаленно
Symfony / PHP developer
до 180 000 ₽ФинФортКраснодарМожно удаленно
PHP Symfony разработчик
от 100 000 до 150 000 ₽DAMIR.INМожно удаленно
Senior PHP Developer (Symfony)
от 3 000 $RELAYTO/Можно удаленно

Лучшие публикации за сутки