За прошлый год в PHPixie добавилось много новых возможностей и несколько компонентов, к тому же немного изменилась стандартная структура бандла чтобы снизить порог вхождения для разработчиков. Так что пришло время создать новый туториал, и в этот раз мы попробуем сделать его чуть по другому. Вместо того чтобы просто смотреть на готовый демо проект с описанием, мы будем идти постепенно, при чем на каждой итерации у нас будет полностью рабочий сайт. Мы будем строить простенький цитатник с логином, регистрацией, интеграцией с соцсетями и консольными командами для статистики. Полная история коммитов на гитхабе.
User
PHPixie Cache: PSR-6, PSR-16 и несколько интересных фич
Еще даже не закончилось голосование за стандарт PSR-16 а PHPixie уже его поддерживает. Казалось бы кэширование настолько уже обработанная сфера, что тут уже нечем и удивить, но надеюсь прочитав статью вы найдете в PHPixie Cache для себя что-то новое и полезное. Как всегда в конце статьи вас ждет инструкция по использованию Cache без фреймворка и также информация о том как расширить компонент и помочь проекту.
Копилка знаний для PHPixie — Часть 1
В нашем чате часто встречаются вопросы ответы на которые могли бы пригодится и другим. К тому же в PHPixie есть много интересных фишек которые не попали в документацию так как они слишком специфические. Чтобы вся эта информация не потерялась я начинаю цикл статьей в стиле "tips and tricks" предназначенный в первую очередь для тех кто уже использует фреймворк. И так, начнем.
Простые миграции с PHPixie Migrate
Консольные команды с PHPixie Console
Песни от OpenBSD
OpenBSD 4.5: Games
But now it's not so easy
Just wanna get this job done
But these A.M.L. games are dumb
You wanna know the truth?
Intel's controlling you
And Microsoft is too
But this is nothing new
With A.C.P.I.
This endless mess so corporate
Tangles and angles
In what could be straight forward
Lost connections
Lost my mind
It's such a waste of time
CHORUS
Now on the motherboard
Where all my life is stored
Playing with garbage there
With rules so unfair
Ruled by A.C.P.I.
Whose heart is so corrupted
Forcing us all to play
Our progress interrupted
Lost connections
Lost my mind
It's such a waste of time
CHORUS
Yes I'm a user
And I'm not the only one
I'm not a loser
With help from Puffy Tron
And we will find it
The pin in all this heartache
Map our devices
And we know what it'll take
Lost connections
Lost my mind
Oh Ooh Woah end of line
(bridge)
On and on
Can we all be wrong?
All and all
We are one
Clean the dream
Gone wrong
We are Tron
On and on and on
Instrumental CHORUS (guitar solo)
Instrumental pre-chorus
CHORUS
dumb dumb dumb
PHPixie против Laravel
Главной причиной написания этой статьи является то что этот вопрос мне задают практически регулярно и было бы хорошо просто иметь под рукой ссылку. Сразу же скажу что холивора в силе Emacs против Vi тут не будет, как и любой попытки сильно упрекнуть Laravel. Уже никто не сомневаются что он работает, на нем крутятся сайты и ничего плохого с ними не происходит, так что глупо утверждать что он чем-то плох. Я же хочу показать какую нишу старается занять PHPixie и Laravel тут просто как пример, так что я надеюсь что читатель воспримет статью как обзор в стиле HTC против Samsung, призванную показать преимущества и разницу в парадигме, но никак не постулировать кто лучше.
PHPixie Social — простая интеграция с соцсетями
Авторизация через соцсети это одна из самих частых задач с которыми сталкиваются разработчики развлекательных сайтов. Казалось бы там и делать нечего, ведь для каждого API существует PHP библиотека от самого вендора. Но что делать если надо подключить сразу несколько? Не хочется тянуть в проект кучу библиотек которые имплементируют один и тот же протокол OAuth, к тому же хотелось бы иметь какой-то единый интерфейс. PHPixie Social — маленькая библиотека с только одной зависимостью, которая позволяет легко работать сразу с Facebook, Twitter, Google и Вконтакте, а если вы используете PHPixie фреймворк то также сразу получаете авторизацию всего в несколько строчек кода.
Но сначала рассмотрим компонент сам по себе.
Dependency Injection контейнер от PHPixie
Я не люблю DI контейнеры. Да, они удобны, но со временем с ними возникает куча проблем, поэтому PHPixie использует классический подход с паттерном Factory. Возможность получить любой сервис из контейнера иногда ломает логическую цепочку программы, когда например какой-то валидатор тянет к себе сервис из совсем другого бандла в Symfony2. Еще хуже когда он используется как Service Locator где все зависимости получаются через вызов в стиле Locator::get('doctrine.entityManager'). К тому же различны имплементации контейнеров поощряют хранение конфигурации в YML и XML файлах, что иногда утрудняет отладку. Но недавно я вспомнил фразу «Не думай что разработчик дурак», то есть не стоить навязывать свою точку зрения при разработке архитектуры. К тому же трудно поспорить с тем, что маленькие проекты намного проще строить используя контейнер и/или локатор зависимостей.
Встречайте PHPixie DI.
Гибкая конфигурация c PHPixie
При разработке часто приходится поддерживать сразу несколько окружений: development, staging. production итд., которые могут иметь довольно разные настройки. Самый простой пример это параметры соединения с базой данных, но иногда хочется изменить не только один параметр а целую секцию, например логирование или бэкенд для кеша. К тому же при разработки различных CMS иногда хочется вынести некоторые настройки на видное место, чтобы пользователю легче было их найти. Посмотрим как эти проблемы решается в PHPixie. Ну и конечно же все это работает без самого фреймворка и намного легче пакета symfony/config.
Оптимизация модели Nested Set в PHPixie
Всего 2 часа назад я дописал последний тест к новому типу связи для PHPixie ORM — Nested Set. Я долго думал использовать ли этот подход или же Closure Table для хранения деревьев в SQL базах. Но в результате Closure Table проиграл ввиду квазиквадратических размеров к которым растет таблица связей (при 20 нодах в худшем случае уже можно получить 190 записей). Так что следующей задачей стала оптимизация классического Nested Set подхода, и результат мне очень даже понравился.
Расширенный скелет проекта PHPixie с аутентификацией и админкой
Базовый скелет проекта PHPixie задуман быть минималистичным, чтобы не навязывать архитектуру пользователю. Но в нашем чате часто возникают вопросы о том как настроить авторизацию, стоит ли разделять фронтенд и бекенд в отдельные бандлы, как лучше организовать процессоры, и тд. Начинать с пустого проекта гораздо труднее для новых пользователей, что поднимает порог вхождения, к тому же иногда просто хочется начать на шаг вперед. Как раз для этого был создан расширенный скелет проекта, в котором это все уже работает.
Вышел Drupal 8 — критический взгляд
После четырёх лет разработки наконец вышла стабильная версия Drupal 8. При этом реакция сообщества оказалась довольно разделенной, одни считают, что этот релиз имеет все шансы полностью свергнуть и заменить Wordpress, другие, что после стольких лет Drupal растерял большинство пользовательской базы и вряд ли соберет ее обратно. Вся причина в иной идеологии чем в других CMS, Drupal 8 делает упор на расширяемость и удобство разработки вместо просто редактирования контента. Как результат по-настоящему оценить его можно будет только года через два, когда уже наполнится база модулей. Но раз он уже вышел, то попробуем посмотреть на ту функциональность, какая есть с точки зрения разработки уже сегодня.
Мой опыт миграции на PHP 7
Несколько дней назад я переключил свой сервер с порядка 30-ти сайтами на PHP 7. Некоторые из них были достаточно старыми и составляли широкий набор с различных фреймворков и CMS. Вот несколько советов для тех кто еще не решил переходить на PHP 7 или нет.
Начнем с того что я понимаю что есть много людей которые не считают стабильную версию действительно «стабильной» пока она чуть-чуть не повзрослела, ожидая что еще найдутся какие-то баги или несовместимости. С того что я пока видел, пробуя каждый release candidate как только он выходил, совсем безопасно переключиться на PHP 7 как только он выйдет. Я ни разу не заметил какого-то непонятного поведения или вылета которому виной не был бы я сам. Несмотря на то что это новая версия она не несет много несовместимых изменений, то есть по большому счету можете относиться к ней как к просто PHP 5.7 только существенно быстрее.
Валидация сложных структур с PHPixie Validate
Сегодня вышел еще один компонент PHPixie 3, в этот раз для валидации данных. Библиотек для PHP которые занимаются валидацией уже достаточно, зачем тогда писать еще один? На самом деле у большинства из них есть большой недостаток — они работают только с одномерными массивами данных ориентируясь в первую очередь на работу с формами. Такой подход неизбежно устарел в мире API и REST, все чаще приходиться работать с документообразными запросами со сложной структурой. Validate с самого начала был спроектирован как раз чтобы справляться с такими задачами. И даже если вы не используете PHPixie этот компонент может вам очень пригодиться.
Безопасная авторизация с PHPixie 3
Сегодня вышел самый долгожданный компонент PHPixie 3 — Auth для авторизации пользователей. Авторизация это наиболее критическая часть любого приложения, сделать ее правильно трудно, а ошибки могут скомпрометировать множество пользователей, особенно если речь идет об оупенсорсе. Использование устарелых hash-функций, криптографически небезопасных генераторов случайных чисел, неправильная работа с кукисами встречаются слишком часто. Я уже когда-то писал о старой уязвимости в Laravel, которую кстати полностью так не исправили. Поэтому в PHPixie Auth я очень внимательно отнёсся к аутентификации, особенно к долгим сессиям и кукисам.
Кстати в конце статьи у меня для вас есть очень радостная новость (спойлер: PHPixie теперь член PHP-FIG)
ReactPHP ускоряет PHPixie в 8 раз
ReactPHP это сокет сервер на PHP созданный для постоянной обработки запросов в отличии от стандартного подхода с Apache и Nginx где процесс умирает по окончании обработки одного запроса. Поскольку инициализация кода таким образом осуществляется только один раз то на отдельном запросе мы упускаем весь оверхед от загрузки классов, запуска фреймворка, считывания конфигурации итд.
Ограничением тут является то, что программист должен помнить что процесс и все поднятые сервисы будут использованы множество раз и по этому доступ к глобальному или статическому скоупу не желателен. Это делает сложным использование ReactPHP с большинством фреймворков не созданных для такого подхода.
К счастью PHPixie сама отказалась от глобального и статического скоупов, что позволяет легко запустить ее из-под ReactPHP.
Быстрый старт с PHPixie 3
После двух лет разработки закончена третья версия фреймворка PHPixie. Почему так долго? На самом деле за это время было написано не меньше трех ORM и шаблонизаторов, которые удалялись и переписывались опять, потому что «ааа, можно ведь сделать лучше». Особенно много времени ушло на тесты, без которых огромное количество улучшений просто не было бы замечено. Много раз хотелось просто оставить это дело, остановиться на второй версии и добавлять в нее модули. Но сейчас, когда все эти итерации были пройдены я могу уверенно сказать что это лучшая имплементация которую я знаю ( и на какую был способен ). Вот чем вас порадует PHPixie 3:
- Следование стандартам PSR-2 и PSR-4
- Поддержка PSR-7 запросов и библиотека для удобной работы с ними
- Шаблонизатор использующий простой PHP, но с поддержкой наследования и блоков как у Twig. Позволяющий легко добавлять свои расширения и другие форматы, например HAML итд.
- ORM который прост в использовании как ActiveRecord, но при этом разбивающий логику запросов, сущностей и репозиториев отдельно. Поддерживающий связи с коллекциями MongoDB и оптимизацию запросов над многими сущностями одновременно (например можно связать несколько статей с несколькими тэгами одним запросом)
- Подход с процессорами вместо привычных контроллеров позволяет создать произвольную архитектуру.
- Компонент конфигураций позволяющий разбивать настройки по в глубину по папкам (например ключ languages.en.plural.mouse может обратится к ключу plural.mouse в файле languages/en.php)
- Система бандлов позволяющая легко использовать один код в нескольких проектах и делится ним с другими пользователями. Бандлы устанавливаются через композер как любая другая библиотека.
А сейчас короткий туториал, который покажет вам все что надо знать чтобы начать разработку с PHPixie 3:
Подпишитесь на 72 известных PHP разработчика одним кликом
Даже если вы не используете Twitter в списке, все равно можно найти много интересных блоггеров.
Удобная отладка с PHPixie Debug
PHPixie Debug был создан чтобы улучшить отладку при разработке в любой среде. Конечно если вы уже используете веб фреймворк то скорее всего проблем с отладкой нет, но вот когда вы пишете какую-то библиотеку, решаете задачку или даже работаете с Wordpress, то удобной отладки сильно недостает. Даже для такого базового функционала как превратить все ошибки в исключения приходится регистрировать свой хендлер. В таких случаях PHPixie Debug в всего лишь две строки кода создаст удобную среду для разработки.
Information
- Rating
- Does not participate
- Location
- Berlin, Berlin, Германия
- Date of birth
- Registered
- Activity