Выпуск №5

Drupal 8 bug bounty, CMS Bolt 2.2, Zend Framework 2.5 и 2.5.1, Laravel 5.1, Использование Traits в Eloquent моделях, PHPUnit 4.7 и 5, конкурсы от DevConf, PHPointless/monolol

Всем привет!

Вы слушаете «Пятиминутку PHP», выпуск номер 5 — еженедельный подкаст о новостях из мира PHP, интересных постах в блогах и современных подходах к разработке.

Команда Drupal объявила о выплате премий за найденные уязвимости в Drupal 8 — обещают выплачивать от 50$ до 1000$ за раз. И это, похоже, реальная тема для небольшой подработки, плюс дополнительная строчка в резюме «контрибьютор в Drupal 8» или «эксперт по безопасности Drupal 8».

Тут стоит рассказать историю. Drupal — это мощная CMS система, первый релиз которой был аж в 2001 году! Развитие шло без резких движений и к седьмой версии, которая вышла в январе 2011 года, мы получили заматеревшую CMS на заматеревших технологиях PHP середины 2000-х. В марте того же 2011 года началась разработка принципиально новой кодовой базы Drupal 8 с использованием ООП, компонент Symfony и других современных подходов. Помню, как я тогда порадовался за Drupal комьюнити, что они пошли правильным путём. Но это было в 2011 году, 4 года назад. Сейчас Drupal 8 находится в стадии бетты и скоро обещают перейти к релиз-кандидатам, как только будут закрыты все критические issue. Каких-либо приблизительных дат финального релиза в роадмапе всё ещё нет. Получается какой-то долгострой… И что ещё печальнее, как мне кажется, даже когда он наконец-таки выйдет, комьюнити будет расколото и он уже не получит былой популярности.

Контр-пример — это WordPress, который принято ругать за код, но который живее всех живых и рулит сейчас 20% интернета!

Так о чём это я… А я о программе выплаты премий за уязвимости в Drupal 8! Уверен, в таком долгострое уязвимостей полно, особенно на текущей стадии беты, так что дерзайте.

От мамонтов индустрии переходим к современным CMS. Вышла плановая версия CMS Bolt 2.2. Из основных фич inline редактирование на фронтенде, новый markdown редактор с предпросмотром, прекращение поддержки PHP 5.3.

Кстати, а вы вообще слышали про эту CMS? Рассказываю. Bolt это система управления контентом с открытым исходным кодом, построена на микрофреймворке Silex, который в свою очередь построен на компонентах Symfony. Используются composer, PSR-2, PHP Unit, Codeception, Travis CI и другие модные штуки.

Но что ещё более интересно — это способ настройки. Допустим вы хотите сделать сайт с разными типами контента: блог посты, галерея, отдельные страницы ваших продуктов — т.е. вам нужны настраиваемые типы записей. Многие CMS имеют такие настройки в админке, но в Bolt это делается особенно круто: написанием YAML конфигов! Итак, из коробки у вас есть различные типы полей: текстовая строка (input type=text), текстовый блок (textarea), выпадающий список, галочки, картинки и т.п. У каждого типа поля есть свойства, например, значение по умолчанию, максимальная длина текста или список опций в выпадающем списке. Вы заходите в админку и прямо в текстовом формате YAML начинаете описывать новый тип записи через набор полей с указанием свойств этих полей. При этом система сама создаст нужные таблицы с правильными полям в базе (привет wp_posts!). А при последующем редактировании YAML конфига структура базы данных будет обновлена, этакая автоматическая миграция получается.

Соответственно, в соседнем меню админки появляется пункт для ввода самого контента. Форма создания и редактирования записи генерируется автоматически на основе описанных полей.

Затем, в той же админке вы открываете редактор шаблонов и создаёте шаблоны с помощью twig. Один шаблон для просмотра записи и один шаблон для просмотра списка записей на сайте.

Получается полный цикл разработки сайта не выходя из админки. Конечно, можно и в PHP углубиться, благо система грамотно спроектирована и построена поверх Silex и знакомых компонент Symfony. Есть готовые расширения (extensions), можно писать свои. В целом хорошая задумка и хорошая реализация, рекомендую попробовать!

На днях вышел ключевой релиз Zend Framework 2.5. Главная новость: все компоненты теперь разрабатываются в отдельных GitHub репозиториях. А Zend Framework сам по себе стал мета-пакетом, которые собирает компоненты с помощью composer! При этом для уже существующих проектов, подключающих Zend Framework, всё работает прозрачно, достаточно выполнить composer update и к вам прилетят все компоненты по отдельности. Плохие новости для тех, кто вместо composer использовал git submodules, т.к. основной репозиторий Zend Framework больше не содержит кода.

Версия 2.5 является важным шагом на пути к версии 3.0, которая выйдет в третьем квартале этого года. Основной упор в мажорном релизе будет сделан на ещё большее разделение компонент, middleware архитектуру с использованием PSR-7 и оптимизацию под PHP 7 (хотя минимально поддерживаемой версией PHP будет оставаться 5.5).

Но на этом новости не заканчиваются. Прошло чуть менее суток и вышел Zend Framweork 2.5.1! Обнаружилась проблема с установкой через composer, а именно тот самый мета-пакет zendframework зависил от пакета zend-ldap, который в свою очередь требовал установленного PHP расширения ldap. Если у вас не было этого этого расширения, то вы ничего не могли поставить.

Тем временем 8 июня ждём выхода Laravel 5.1 с расширенным сроком поддержки багов до 2-х лет и безопасности до 3-х лет, А минимальная поддерживаемая версия PHP увеличится до 5.5. Чтобы не забыть дату выхода, добавьте в закладки сайт laravelcountdown.com

А пока предлагаю послушать апрельский выпуск Full Stack Radio #14 — в гостях создатель Laravel Taylor Otwell. В темах выпуска детали последнего проекта Тэйлора — Envoyer — система деплоя PHP проектов с нулевым временем простоя. А также немного про версию 5.1 и другие интересные проекты Тейлора.

Ещё одна примечательная статья на тему Laravel: использование Traits в Eloquent моделях. На самом деле, даже если вы не программируете на Laravel и впервые слышите про Eloquent, всё равно рекомендую посмотреть эту статью, т.к. она показывает один из фундаментальных недостатков трейтов в PHP. Если подключаемый трейт требует какой-то инициализации своей внутренней логики, то вам придётся запустить эту логику вручную в том классе, куда вы подключаете trait. У трейтов, к сожалению, нет чего-то типа конструктора, который бы запускался бы автоматически.

Только что вышла свежая версия PHPUnit 4.7. Изменения минимальные, расскажу лучше про roadmap. В августе планируется выпустить PHPUnti 4.8 и это будет последний релиз в ветке 4. А уже в октябре этого года нас ждёт PHPUnit 5. Минимально поддерживаемой версией PHP станет PHP 5.6. Как видим, современные фреймворки и библиотеки бодро поднимают минимальный номер версии версии PHP. Прошли те времена, когда мы годами сидели на PHP 5.2, а потом годами на 5.3.

Кратко подведём итоги:

  • PHPUnit 5 потребует PHP 5.6
  • Laravel 5.1 потребует PHP 5.5
  • Symfony 3 тоже потребует PHP 5.5
  • Zend Framework 2.5 уже требует PHP 5.5

Интересно, кто первый решится на требование PHP 7?

Немного приятных бонусов от организаторов DevConf — конференции, которая пройдёт 19 июня в Москве.
Конкурс: предложи идею для значка для участников секции Storage и DevOps (значёк — это такой кружочек на булавке). Авторы трёх лучших идей получат бесплатный проход. Писать в комменты на хабре.
Второй конкурс: напиши сообщение в twitter «Хочу на DevConf 19 июня!» с хэштегом #devconf_ru и каждый день с 5 по 8 июня будет разыгрываться один бесплатный проход.

Ну и под конец немного юмора. Обратите внимание на GitHub репозиторий PHPointless/monolol. Monolol — это PSR-3 совместимый lol-gger. Очень похож на монолог, но предлагает дополнительные обработчики. Suffle — рандомно перемешивает слова в лог сообщении. Confuse — случайным образом меняет loglevel. Или Hash — записывает вместо сообщения хэш от него. Mirror — записывает сообщение в обратном порядке. Это пока единственный репозиторий в GitHub организации PHPointless, ждём новых, присоединяйтесь!

  • Читать подкаст это мовитон Все кто слушают подкасты терпеть не могут подкасты где зачитывается зарание написанный текст. Хотите делать подкаст, сочиняйте на ходу, предварительно набросав заголовки тем. Нужна текстовая версия подкаста? Напишите ее уже после записи подкаста. В таком виде слушать невозможно

    • Согласен, буду работать в этом направлении.

      • s_mart

        Не стоит убирать текстовую составляющую. Очень удобно, ведь этот подкаст — скорее список новостей и ссылок на новинки и статьи. Потом не только слушать в машине или плеере, но и за ноутом поизучать ссылочки полезно. Спасибо еще раз!

  • Товарищ, ты куда запропастился? Мы скучаем =(

    • Готовлю крутой тематический выпуск! На днях будет)