Сравнение php фреймворков. Современный PHP без фреймворков. Сравниваем CMS, чистый код и фреймворк

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

В этой статье мы поможем вам найти лучший PHP framework для вашей разработки, представив вам восемь лучших вариантов.

Мы поговорим о плюсах и минусах каждой платформы, её технических характеристиках и многом другом. Давайте доберёмся до этого!

В мире разработки программного обеспечения термин “framework” относится к библиотекам файлов, которые включают несколько основных функций. Цель фреймворка - предоставить вам основу, которую вы можете использовать для более эффективной разработки проектов. Чтобы сделать это, он будет включать в себя множество функций, которые вам нужно будет кодировать с нуля, если вы хотите начать с начала.

Представьте, что вы, например, пытаетесь приготовить новое блюдо. Вы бы купили много ингредиентов, которые вам нужно было бы приготовить определённым образом. Однако вам также потребуется доступ к некоторым элементам, таким как кастрюли, сковородки, ножи и разделочная доска. В этом примере все эти кухонные принадлежности будут частью базовой структуры. Без них вам бы пришлось начинать с нуля каждый раз.

Фреймворки функционируют одинаково, избавляя вас от необходимости постоянно изобретать велосипед. Если вы хотите , лучше всего начать с поиска фреймворка, который включает в себя все функции, которые вам понадобятся. К счастью, есть много вариантов на выбор. Все они уникальны в том, как они подходят к развитию, и у всех есть свои плюсы и минусы.

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

8 лучших PHP framework для веб-разработки

Если вы когда-либо использовали фреймворки раньше, то вы будете знать, что каждый инструмент уникален. Помня об этом, мы сделаем всё возможное, чтобы предоставить всю информацию, которая вам понадобится, чтобы выбрать для вас лучшую среду PHP. Все эти варианты бесплатны и имеют открытый исходный код, поэтому вы можете попробовать любой из тех, которые вызовут у вас интерес. Давайте начнём с вершины!

1. Laravel

Когда люди говорят о PHP framework, чаще всего всплывает название Laravel (англ). Эта специфическая структура известна своим элегантным синтаксисом, который легко понять и с которым приятно работать.

С Lavarel вы можете быстро приступить к работе над своими проектами. Вы также сможете пропустить много основ, поскольку вы получаете доступ к таким функциям, как аутентификация пользователей, управление сеансами и кэширование. В целом, Laravel обладает всеми функциональными возможностями, которые вам понадобятся для создания современного PHP-приложения, что говорит о многом.

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

Laravel также прекрасно интегрируется с другими сторонними библиотеками и платформами, такими как Amazon Web Services (AWS), что позволяет создавать высокомасштабируемые приложения. Для долгосрочных задач вы можете поставить их в очередь для асинхронного выполнения в фоновом режиме, что ещё больше повышает производительность.

Ключевые особенности:

  • Используйте структуру, которая гордится элегантным синтаксисом
  • Расширьте базовую функциональность Laravel, используя дополнения
  • Используйте встроенные функции для управления маршрутизацией, управлением пользователями, кэшированием и многим другим
  • Интегрируйте Laravel со сторонними библиотеками и платформами, такими как AWS
  • Запускайте задачи асинхронно в фоновом режиме для повышения производительности

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

2. CodeIgniter

Ключевые особенности:

  • Полная поддержка HMVC
  • Усиленная безопасность по умолчанию
  • Уникальная утилита командной строки

Фреймворк поддерживает PHP версии 5.4 и выше. Кроме того, он предлагает подробную документацию (англ), которая поможет начать разработку как можно быстрее.

Заключение

Существует множество языков программирования, которые вы можете использовать, но PHP по-прежнему является лучшим вариантом для сценариев на стороне сервера. Тем не менее, даже если вы профессионал PHP, кодирование всех частей каждого нового проекта займёт много времени. Однако, если вы выберете лучший PHP framework для своих нужд, вы можете пропустить множество основ и сразу перейти к интересной части разработки нового проекта.

Как вы думаете, какой PHP framework является лучшим? Поделитесь своими мыслями с нами в разделе комментариев ниже!

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

Сравнение чистого PHP и PHP фреймворка может быть похоже на математику.

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

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

Так что я имею в виду?

Нативный PHP - Математика с бумагой

Хороший студент может решить задачу за несколько шагов. Уровень точности - от 75% до 100%.

Посредственный студент сможет или не сможет решить задачу, он запишет несколько шагов для решения одной и той же задачи. Здесь уровень точности - от 50% до 75%.

Плохой студент не сможет решить задачу вовсе. Тем не менее, он будет записывать много и много шагов для решения проблемы. Уровень точности - от 0% до 50%.

Научный калькулятор

Каждый студент может решить проблему с точностью 100%, как только они узнают, как использовать калькулятор. Предопределенные формулы в калькуляторе будут давать точные результаты быстрее.

Проблема с чистым PHP

Чистый PHP становится сложным, когда люди начинают писать свою собственную логику. Кто-то сможет решить поставленную задачу в несколько строк кода, а кто-то не сможет и в несколько сотен. А в результате оба они не могут читать код друг друга. Итак, проблема, которая зарождается здесь, это несогласованность.

Почему выбирают фреймворки?

Фреймворк обеспечивает надежность, согласованность и большую экономию времени. Он имеет богатый набор функций, поэтому вам не нужно повторно изобретать колесо. У вас будет практически все функциональные возможности для разработки веб-приложения PHP . Поскольку он был разработан в стиле ООП, вы можете расширить существующую функциональность, чтобы иметь полный контроль над приложением. Фреймворк не позволит вам писать плохой код, если, конечно, вы намеренно это не делаете. Когда вы работаете в команде, интеграция всего вашего модуля становится очень легкой, а также фреймворк помогает в понимании кода друг друга.

Когда вы начинаете разработку проекта, есть много вещей, о которых вы должны заботиться. Фреймворк делает все за нас, поэтому можно быть уверенным, что приложение является чистым и безопасным. Шаблон MVC является одним из ключевых элементов любого современного PHP фреймворка , разделение логики и представления - очень хорошая практика.

Модификация проекта

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

Тогда неужели чистый PHP так плох ?

Абсолютно нет. Чистый PHP помогает понять логику фреймворка. Ваше логическое мышление может быть улучшено с помощью чистого PHP . Однако нативный PHP становится плохим только тогда, когда он попадает на стол плохого программиста. Не погружайтесь в фреймворк без опыта кодирования на чистом PHP . Также, убедитесь, что вы прочитали полную документацию по фреймворку, прежде чем начинать кодирование в нем, так как в настоящее время стало “модно”, использовать нативный PHP внутри фреймворка, но это абсолютно неверный путь использования такого полезного инструмента.

А вообще, проще всего разобраться с тем, что такое фреймворки можно с помощью моего курса .

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

Путем использования PHP-фреймворков, разработчики смогут значительно сократить время разработки, избегая необходимости программировать с нуля. Без правильно обозначенного PHP-фреймворка трудно управлять кодом. РНР действует на основе MVC (модель-представление-контроллер), которая представляет собой архитектурный образец доступный на языках программирования, создавая мост между логикой предметной области и пользовательским интерфейсом. Задача логики предметной области является работа с возможностью управления обменом информацией между базой данных и пользовательским интерфейсом. Это упрощает весь процесс.

Вот список 42 лучших PHP-фреймворков, которые вы можете использовать в 2017 году.

Фреймворк Laravel имеет выразительные и аккуратные правила языка, что заставляет веб-приложения выделяться на фоне остальных. Этот фреймворк был создан для того, чтобы разработчики имели бесплатный, с открытым исходным кодом PHP-фреймворк для веб-приложений. Добавляют популярности этому фреймворку определенные функции, такие как сильные строительные инструменты, большие сильные приложения, с особым контейнером управления инверсиями, коммуникативная структура миграции и тесно внедренная программа тестирования технического обслуживания.

Будучи весьма популярным PHP-фреймворком среди экспертных разработчиков, Symfony используется для разработки отличных веб-сайтов и приложений с помощью различных профессиональных и творческих методов. Это мощный фреймворк, помогающий уменьшить проблемы повторяющихся структур кодирования. Кроме того, он гарантирует стабильную платформу, что делает его одним из самых востребованных PHP-фреймворков по всему миру.

Считаясь гибкой, Сodeigniter является открытым программным обеспечением PHP, который сумел добиться признания за свое классическое исполнение. На самом деле, он имеет возможность поддержки следующего поколения разработки приложений, которое требует упрощенного кодирования. Это значит, что не будет каких-либо ограничений в процессе кодирования и не потребуется сложной конфигурации, чтобы заставить фреймврк работать. В двух словах, прелесть Сodeigniter заключается в предоставлении простых решений сложных проблем программирования для создания веб-приложений.

Это быстрый, безопасный и экспертный PHP-фреймворк, который предоставляет весомую помощь кэширования и создан для того, чтобы грамотно работать с AJAX. Несомненно, быстрые решения разработки фреймворка, делает его очень легким для разработчиков при создании приложений в короткие сроки. Прекрасно разработанные с качественным документированием в сжатые сроки, приложения, созданные с использованием Yii Framework, предоставляют удивительный пользовательский опыт и особенности.

Конечно, попадая в разряд мощных фреймворков, Cake PHP 3.0 является одним из самых важных PHP-фреймворков, которому доверяют разработчики. На протяжении многих лет он был обновлен импровизированными сессиями управления, усовершенствованиями на основе ORM и многое другое. Платформа также предлагает решения для создания автономных библиотек с бесконечной поддержкой повышения модульности.

Рассматриваемый, как full-stack фреймворк, эта структура PHP написана с использованием языков C и C++. Эти языки добавлены к фактору производительности Phalcon. Благодаря своим инновационным возможностям, Phalcon быстро стал одним из самых популярных фреймворков для создания веб-приложений.

Еще один выдающийся PHP-фреймворк. Абсолютно инновационный, безопасный и предлагающий гибкость фреймворк, в котором нуждаются кодеры для создания веб-приложений. На протяжении многих лет, Zend был использован в крупных корпоративных проектах. Будучи открытым программным обеспечением, этот фреймворк требует применения объектно-ориентированного кода для разработки веб-приложений. В сочетании с сильным механизмом стандартной библиотеки, Zend предлагает высокую производительность с реализацией MVC, подтверждая свой статус влиятельного и гибкого фреймворка.

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

Это легкий, маневренный, управляемый сообществом PHP 5.3+ фремворк, который опирается на лучшие идеи из других структур. Популярный как модель презентации, Fuel PHP пропитан дополнительными функциями между контроллерами. Это мощный, профессиональный и отзывчивый фреймворк PHP, который помогает создавать невероятные сайты.

Разработчики PHP, которые ищут упрощенный PHP-фреймворк, выбирают PHPixie, потому что он функционирует на платформе шаблона MVC, помогая разработчикам создавать приложения за короткий промежуток времени. Это несложный в изучении и безукоризненно выполняющий создание качественных веб-приложений инструмент. Кроме того, он предлагает прочную основу для разработки. Требующий меньшей конфигурации и простой в использовании, фреймворк будет все более и более популярным в ближайшие дни.

Kohana - это стильный PHP-фреймворк с большим набором функций для создания веб-приложений. Он помогает в быстром создании веб-приложений благодаря многочисленным интегрированным универсальным компонентам таким, как инструменты перевода, профилирование кода, доступ к базе данных, шифрование, проверка и многое другое. Фреймворк также имеет превосходные инструменты для отладки и профилирования, помогая решить любые проблемы. Kohana разработан, чтобы стать быстрым PHP-фреймворкам, оптимизированным для реальной обработки.

Созданный, как облегченный фреймворк, Slim – это микро-фреймворк, который позволяет быстро создавать легкие и мощные веб-приложения. Он имеет надежный маршрутизатор, шаблон с изображениями, http-кэширование, флэш-сообщения, защищенные куки с AES-256 шифрованием, ведение журнала, обработка и отладка ошибок, а также несложные конфигурации.

Flight - это распространенная микро структура, предназначенная для PHP-разработчиков, и известная как быстрый, легкий и гибкий фреймворк. Лучшей частью фреймворка является то, что он позволяет разработчикам быстро и легко создавать мощные веб-приложения. Он требует наличие PHP 5.3+.

Medoo - это самый легкий и легкоуправляемый PHP-фреймворк, используемый, чтобы ускорить процесс веб-разработки. Он занимает всего лишь 13kb пространства в одном файле. Этот фреймворк чрезвычайно прост в освоении и реализации, совместимый с различными SQL базами данных, такими как MySQL, SQLite и СУБД MSSQL, Maria DB, Oracle, Postgre SQL, Sybase и другие. Платформа предоставляется бесплатно по лицензии MIT. Medoo - это большое облегчение для тех разработчиков, которые не хотят запутаться в управлении сложными требованиями кодирования.

Дизайн фреймворка POP PHP весьма тяжелый, но простой в использовании с эффективным API. Он требует наличие PHP 5.3+ и сумел при этом сохранить свой минимализм и легкий характер. Хотя были добавлены многие новые функции, он по-прежнему может использоваться исключительно в качестве инструмента, или в качестве основы ваших приложений.

Это мощный помощник разработчикам в создании лучших сайтов. Он использует радикальные технологии, которые устраняет дыры в безопасности и их неправильное обращение, как в XSS, а также записи сессии. Фреймворк имеет сильные инструменты отладки, которые помогают в обнаружении ошибок.

Будучи мощным и простым в использовании микро-фреймворком, Fat-free был создан Bong Cosca в 2009 году. Действительно, это один из самых легких фреймворков в весом меньше, чем 50 кб. Он был создан почти полностью на PHP с такими функциями, как URL-маршрутизатор, поддержка многоязычных приложений и двигатель кэш. Существует множество плагинов для обширной базы данных серверных операций, таких как MSSQL, MySQL, PostgreSQL, SQLite, Sybase, MongoDB, DB2, CouchDB и Flat File.

Продолжение следует…

Выбор правильного фреймворка для проекта на PHP - первый шаг для его успешной реализации. Из нашей статьи вы узнаете о лучших PHP-фреймворках 2016 года.

Slim

Slim - микрофреймворк, идеально подходящий для небольших проектов или приложений, где полноценный фреймворк покажется лишним. Его используют многие PHP-разработчики для создания RESTful API и сервисов. Среди функций Slim - кэширование HTTP на стороне клиента, URL-маршрутизация, шифрование сессий и cookie, а также мгновенные сообщения по HTTP-запросам. Документация полная и сделана качественно.

Phalcon

Phalcon был создан в 2012 году и быстро стал популярным среди PHP-разработчиков. Его считают очень быстрым, так как он написан на C и C++, чтобы достигать наивысшего возможного уровня оптимизации производительности. Но не волнуйтесь, учить С не придется - вся функциональность заключена в PHP-классы, которые можно использовать для любых целей.

Так как Phalcon изначально был создан как расширение на С, его архитектура оптимизирована на низком уровне, что значительно снижает расходование ресурсов, типичное для приложений, основанных на схеме MVC. Phalcon не только повышает скорость выполнения, но и снижает уровень затрат ресурсов. У этого PHP-фреймворка есть и много других замечательных функций: универсальный автозагрузчик, менеджмент ресурсов, безопасность, перевод, кеширование и т. д. Документация для Phalcon довольна обширна, а использовать его несложно.

Интересный факт: еще в году Phalcon был вторым по популярности фреймворком, согласно данным sitepoint.com. А уже в 2015-м он заметно сдал позиции и переместился ближе к концу списка.

CakePHP

Фреймворку CakePHP уже десять лет, а он все еще в топе. Работе с ним легко обучиться, а шаблонирование - быстрое и настраиваемое. Встроенная функция CRUD очень помогает при взаимодействии с базой данных. В последнем релизе - CakePHP 3.x - улучшилось управление сессиями и модульность (они разъединили несколько компонентов), а также расширились возможности создания большего количества отдельных библиотек.

Среди проектов, реализованных на CakePHP, - сайты BMW и Hyundai . Выбирайте его, если вашему веб-приложению требуется высокий уровень безопасности, потому что функций для этого здесь предостаточно:

  • валидация ввода;
  • Защита от атак с использованием внедряемого SQL (SQL injection);
  • предотвращение межсайтового скриптинга;
  • защита от подделки межсайтовых запросов и многое другое.

Zend Framework 2

Zend Framework 2 - фреймворк с открытым исходным кодом, использующийся для разработки веб-приложений и сервисов на PHP 5.3+. Он использует на 100% объектно-ориентированный код и большинство новых функций PHP 5.3: пространства имен, позднее статическое связывание, лямбда-функции и замыкания. Zend - надежное решение со множеством вариантов конфигурации. Обычно его не рекомендуют использовать для небольших приложений, а вот для крупных проектов это самое то.

Среди функций Zend Framework 2: инструменты криптографического кодирования, простой в использовании drag-and-drop-редактор с поддержкой фронтенд-технологий (HTML, CSS, JavaScript), мгновенная онлайн-отладка, инструменты для unit тестирования, мастер конфигурации базы данных. Создатели этого фреймворка учли методологию Agile, что позволяет создавать высококачественные приложения для корпоративных клиентов.

В партнерах Zend - IBM, Microsoft, Google и Adobe. Год назад Zend объявил о следующем крупном релизе - Zend Framework 3, оптимизированном под PHP 7, но все еще поддерживающем PHP 5.5 и выше. Все ждали новинку еще осенью 2015-го, но и сейчас, в апреле 2016-го третьей версии все нет.

Yii 2

Выбирайте Yii , чтобы повысить производительность сайта. Он быстрее всех остальных PHP-фреймворков, так как использует технологию загрузки по требованию (lazy loading). Yii 2 полностью объектно-ориентированный и основан на принципе Don’t-Repeat-Yourself («не повторяйся»), так что основа для кода будет чистая и логичная.

Yii 2 интегрирован с jQuery и поставляется с набором AJAX функций. Механизмы скиннинга и выбора тем здесь просты, так что фреймворк понравится тем, кто ранее занимался фронтенд-разработкой. Здесь также есть мощный генератор исходного кода - Gii , который способствует объектно-ориентированному программированию и быстрому прототипированию, а также предоставляет веб-интерфейс, в котором можно интерактивно генерировать нужный код.

PHPixie

PHPixie - сравнительно новый фреймворк, созданный в 2012 году для сайтов-визиток. Как и FuelPHP, PHPixie поддерживает схему HMVC. Он построен на независимых компонентах , которые можно использовать даже без самого фреймворка. Модули компонентов PHPixie полностью протестированы и требуют минимум других компонентов для своей работы.

На официальном сайте PHPixie есть обучающее видео, в котором заявляют, что обучиться работе с фреймворком вы сможете всего за полчаса . В их блоге также много практический кейсов. Среди функций:работа с БД на уровне объектов (ORM), кеширование, валидация ввода, аутентификация и возможности для авторизации. Можно использовать язык разметки HAML, легко вносить изменения в структуру БД, а также есть продуманная система маршрутизации.

Интересный факт о PHPixie: согласно исследованию Sitepoint 2015 года, это любимый фреймворк украинских PHP-разработчиков. Компания «Культпросвет» тоже находится в Украине, но мы почему-то не можем поставить этот фреймворк на первое место, рука не поднимается. PHPixie также популярен среди группы респондентов до 18 лет. Мы думаем, это благодаря картинке с феечкой на сайте:D

CodeIgniter

CodeIgniter - PHP-фреймворк с десятилетним стажем и очень простым процессом установки, требующим минимальной конфигурации, так что начать будет просто. Хороший выбор, если есть риск конфликта разных PHP-версий: он идеально работает практически на всех платформах виртуального и выделенного хостинга.

CodeIgniter не совсем опирается на схему MVC. Использование контроллеров обязательно, а моделей и представлений - нет, так что можно применять собственные стандарты оформления кода и найменований. Этот фреймворк подойдет тем, кому тесно в рамках, - тут море свободы. По сути это простой фреймворк на 2 МБ, но при желании можно добавлять сторонние плагины, если требуется более сложная функциональность.

Symfony 2

Компоненты фреймворка Symfony 2 используются во многих замечательных проектах, например , phpBB и Laravel - (внимание, спойлер!) победителе нашего рейтинга. Symfony может гордиться обширным сообществом разработчиков и большим количеством преданных поклонников.

Компоненты Symfony - это PHP-библиотеки, которые можно использовать повторно и выполнять с их помощью множество задач: создание форм, конфигурацию объектов, маршрутизацию, аутентификацию, создание шаблонов и много чего еще. Любой компонент можно установить с помощью Homestead , которая по сути является надстройкой над Vagrant.

Сравнительная таблица PHP-фреймворков

Laravel Symfony 2 Codeigniter PHPixie Yii 2 Zend Framework 2 CakePHP Phalcon Slim Fuelphp
требуемая
версия php
5.5.9 5.5.9 5.4 5.3 5.1.0 5.3 5.5.9 5.3 5.5 5.3.3
ТИПы
поддерживаемых
баз данных
MySQL Postgress SQLite SQL Server MySQL
Postgress
SQLite
Qracle
MySQL
Postgress
MySQL
PostgreSQI
SQLite
MongoDB
MySQL
Postgress
Qracle
Sqlite
MySQL
SqLite
SQL Server Oracle Postgress
MySQL
SQLite Postgress
SQL server
Oracle
MySQL
SQLite Postgress
Oracle
MySQL
SQLite Postgress
Oracle (через
плагин
Slim-PDO)
MySQL
SQLite Postgress
Облачное
хранилище
Amazon S3
Rackspace
Amazon S3
(плагин)
Amazon S3
(плагин)
- Amazon S3 Amazon S3
Rackspace
Windows Azure
Amazon S3
(плагин)
Amazon S3
(плагин)
- Amazon S3
(плагин)
документация на
официальном
сайте
Пошаговое
руководство,
справка по API, видеоуроки
Пошаговое
руководство,
справка по API
Небольшое
пошаговое
руководство,
справка по API
Пошпговое
руководство
Пошаговое
руководство,
справка по API
Пошаговое
руководство,
подробная справка
по API с
  • Перевод
  • Tutorial

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


Но эта статья не о них. Она о вас. О возможности стать лучше как разработчик.


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


Возможно, ваша следующая работа не позволит вам насладиться запуском нового проекта без фреймворка. Многие важные, критические для бизнеса PHP-задачи подразумевают использование уже существующих приложений. И неважно, будет это приложение, построенное на современном фреймворке вроде Laravel или Symfony, на одной из старых платформ вроде CodeIgniter или FuelPHP - либо это удручающе широко распространённое легаси PHP-приложение с «include-oriented архитектурой» : если сейчас вы будете разрабатывать без фреймворка, то окажетесь лучше подготовлены к любом у будущему PHP-проекту.


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


Но сегодня благодаря стараниям PHP-FIG в сфере автозагрузки и взаимной совместимости вы можете разрабатывать без фреймворка, не создавая его попутно. Существует множество замечательных, взаимно совместимых пакетов, написанных многочисленными разработчиками. И собрать их в единую систему гораздо проще, чем вы думаете!

Как работает PHP?

Прежде всего важно понять, как PHP-приложения взаимодействуют с внешним миром.


PHP исполняет серверные приложения в цикле запрос/ответ. Всё взаимодействие с приложением - из браузера, командной строки или REST API - приходит в него в качестве запросов. При получении запроса приложение загружается, обрабатывает запрос и генерирует ответ, который передаётся обратно клиенту, а приложение закрывается. И так происходит при каждом обращении.

Контроллер запросов

Вооружившись этим знанием, начнём с фронт-контроллера. Он представляет собой PHP-файл, обрабатывающий все запросы к вашему приложению. То есть это первый PHP-файл, в который попадает запрос, и (по сути) последний PHP-файл, через который проходит ответ приложения.


Давайте воспользуемся классическим примером с Hello, world !, обслуживаемым встроенным в PHP веб-сервером , чтобы проверить, всё ли настроено корректно. Если вы этого ещё не сделали, то удостоверьтесь, что в среде установлен PHP 7.1 или выше.


Создадим директорию проекта, в ней сделаем вложенную директорию public , а внутри неё - файл index.php с таким кодом:


Обратите внимание, здесь мы объявляем строгую типизацию - это нужно делать в начале каждого PHP-файла вашего приложения, - потому что подсказки типов (type hinting) важны для отладки и ясного понимания теми, кто будет заниматься кодом после вас.



php -S localhost:8080 -t public/

Теперь откроем в браузере адрес http://localhost:8080/ . Отображается Hello, world ! без ошибок?


Отлично. Переходим к следующему шагу!

Автозагрузка и сторонние пакеты

Когда вы впервые начали работать с PHP, то, вероятно, использовали выражения include или require для получения функциональности или конфигураций из других PHP-файлов. В целом этого лучше избегать, потому что другим людям потом будет гораздо труднее разобраться в коде и понять, где находятся зависимости. Это превращает отладку в кошмар .


Выход - автозагрузка. Это означает, что, когда вашему приложению нужно использовать какой-то класс, PHP знает, где его найти, и автоматически загружает в момент вызова. Эта возможность существует со времён PHP 5, но стала активно применяться только с появлением PSR-0 (стандарта автозагрузки, сегодня заменён PSR-4).


Можно было бы пройти через тягомотину написания собственного автозагрузчика, но раз мы выбрали Composer для управления сторонними зависимостями, а в нём уже есть очень удобный автозагрузчик, то его мы и будем использовать.

Middleware

Если представить приложение в виде луковицы, в которой запросы идут снаружи к центру, а ответы в обратном направлении, то middleware - это каждый слой луковицы, который получает запросы, вероятно, что-то делает с ответами и передаёт их в нижний слой либо генерирует ответ и отправляет в верхний слой. Такое случается, если промежуточный слой проверяет запросы на соответствие каким-то условиям вроде запроса несуществующего пути.


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


Варианты использования промежуточных слоев:

  • Отладка проблем при разработке.
  • Постепенная обработка исключений в production.
  • Ограничение частоты входящих запросов.
  • Ответы на запросы неподдерживаемых медиатипов.
  • Обработка CORS.
  • Маршрутизация запросов в соответствующие обрабатывающие классы.

Промежуточный слой - это единственный способ реализации инструментов для обработки всех этих ситуаций? Вовсе нет. Но реализации middleware позволяют сделать цикл запрос/ответ гораздо понятнее, что сильно упростит отладку и ускорит разработку.


Мы воспользуемся промежуточным слоем для последнего сценария: маршрутизации.

Маршрутизация

Маршрутизатор применяет информацию из запроса, чтобы понять, какой класс должен его обработать (например, URI /products/purple-dress/medium должен быть обработан с помощью класса ProductDetails::class с передаваемыми в качестве аргументов purple-dress и medium).


Наше приложение будет использовать популярный маршрутизатор FastRoute через реализацию промежуточного слоя, совместимого с PSR-15 .

Диспетчер middleware

Чтобы наше приложение стало работать с каким-либо промежуточным слоем, нам понадобится диспетчер.



composer require relay/relay:2.x@dev

А поскольку спецификация PSR-15 подразумевает, чтобы реализация промежуточного слоя передавала HTTP-сообщения, совместимые с PSR-7 , мы воспользуемся Zend Diactoros .


composer require zendframework/zend-diactoros

Подготовим Relay к приёму промежуточных слоев.


// ... use DI\ContainerBuilder; use ExampleApp\HelloWorld; use Relay\Relay; use Zend\Diactoros\ServerRequestFactory; use function DI\create; // ... $container = $containerBuilder->build(); $middlewareQueue = ; $requestHandler = new Relay($middlewareQueue); $requestHandler->

В строке 16 мы с помощью ServerRequestFactory::fromGlobals() будем собирать всю информацию, необходимую для создания нового запроса и передачи его Relay . Здесь запрос попадает в стек промежуточных слоев.


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


composer require middlewares/fast-route middlewares/request-handler

А теперь определим маршрут для класса обработчика Hello, world !.. Здесь мы воспользуемся маршрутом /hello , чтобы продемонстрировать возможность использования маршрута, отличающегося от базового URI.


// ... use DI\ContainerBuilder; use ExampleApp\HelloWorld; use FastRoute\RouteCollector; use Middlewares\FastRoute; use Middlewares\RequestHandler; use Relay\Relay; use Zend\Diactoros\ServerRequestFactory; use function DI\create; use function FastRoute\simpleDispatcher; // ... $container = $containerBuilder->build(); $routes = simpleDispatcher(function (RouteCollector $r) { $r->get("/hello", HelloWorld::class); }); $middlewareQueue = new FastRoute($routes); $middlewareQueue = new RequestHandler(); $requestHandler = new Relay($middlewareQueue); $requestHandler->handle(ServerRequestFactory::fromGlobals());

Чтобы всё заработало, нужно обновить HelloWorld , сделав его вызываемым классом, то есть чтобы этот класс можно было вызвать как функцию .


// ... class HelloWorld { public function __invoke(): void { echo "Hello, autoloaded world!"; exit; } }

Обратите внимание на добавленный exit; в магическом методе __invoke() . Скоро вы поймёте, к чему это.



// ... use Zend\Diactoros\ServerRequestFactory; use function DI\create; use function DI\get; use function FastRoute\simpleDispatcher; // ... $containerBuilder->addDefinitions([ HelloWorld::class => create(HelloWorld::class) ->constructor(get("Foo")), "Foo" => "bar" ]); $container = $containerBuilder->build(); // ... $middlewareQueue = new FastRoute($routes); $middlewareQueue = new RequestHandler($container); $requestHandler = new Relay($middlewareQueue); $requestHandler->handle(ServerRequestFactory::fromGlobals());

Вуаля! При перезагрузке браузера вы должны увидеть Hello, bar world! .

Правильная отправка ответов

Помните, я упомянул о выражении exit в HelloWorld ?


Это простой способ удостовериться, что мы получили простой ответ, но всё же это не лучший способ отправки выходных данных в браузер. Такой грубый подход заставляет HelloWorld делать лишнюю работу по отдаче отчетов - а этим должен заниматься другой класс, - что слишком усложняет отправку заголовков и кодов статуса , а также приводит к закрытию приложения, не давая шансов запуститься промежуточному ПО, идущему после HelloWorld .



Обновим HelloWorld для возвращения Response .


// ... namespace ExampleApp; use Psr\Http\Message\ResponseInterface; class HelloWorld { private $foo; private $response; public function __construct(string $foo, ResponseInterface $response) { $this->foo = $foo; $this->response = $response; } public function __invoke(): ResponseInterface { $response = $this->response->withHeader("Content-Type", "text/html"); $response->getBody() ->write("Hello, {$this->foo} world!"); return $response; } }

Обновим определение контейнера, чтоб HelloWorld предоставлялся со свежим объектом Response .


// ... use Middlewares\RequestHandler; use Relay\Relay; use Zend\Diactoros\Response; use Zend\Diactoros\ServerRequestFactory; use function DI\create; // ... $containerBuilder->addDefinitions([ HelloWorld::class => create(HelloWorld::class) ->constructor(get("Foo"), get("Response")), "Foo" => "bar", "Response" => function() { return new Response(); }, ]); $container = $containerBuilder->build(); // ...

Если мы сейчас обновим страницу, то получим пустой экран. Приложение возвращает из диспетчера промежуточных слоев правильный объект Response , а потом… что?


Просто ничего с ним не делает.


Нам нужен ещё один инструмент: эмиттер. Он находится между приложением и веб-сервером (Apache, nginx и т. д.) и отправляет ваш ответ клиенту, сгенерировавшему запрос. Эмиттер просто берёт объект Response и преобразует в инструкции, доступные для понимания серверным API .


Хорошие новости! Пакет Zend Diactoros , который мы уже используем для управления запросами, включает в себя эмиттер для ответов PSR-7.


Для простоты примера мы используем здесь очень простой эмиттер. Хотя он может быть гораздо сложнее, но в случае больших загрузок реальное приложение должно быть сконфигурировано для автоматического использования потокового эмиттера. Это хорошо описано в блоге Zend .


Обновим public/index.php для получения Response от диспетчера и передачи в эмиттер.


// ... use Relay\Relay; use Zend\Diactoros\Response; use Zend\Diactoros\Response\SapiEmitter; use Zend\Diactoros\ServerRequestFactory; use function DI\create; // ... $requestHandler = new Relay($middlewareQueue); $response = $requestHandler->handle(ServerRequestFactory::fromGlobals()); $emitter = new SapiEmitter(); return $emitter->emit($response);

Перезагрузим страницу - мы снова в деле! Пришло время для более надёжной обработки ответов.


В строке 15 заканчивается цикл запрос/ответ и вступает в работу веб-сервер.

Завершение

С помощью 44 строк кода и нескольких широко используемых, тщательно протестированных, надёжных, взаимодействующих друг с другом компонентов мы реализовали программу bootstrap современного PHP-приложения. Он совместим со стандартами PSR-4 , PSR-7 , PSR-11 и PSR-15 , поэтому вам доступен широкий спектр реализаций HTTP-сообщений, DI-контейнеров, middleware и диспетчеров.


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

Теги: Добавить метки



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: