Домой Работа с файлами Популярные php framework. Какой PHP-фреймворк выбрать для изучения? Что же изучать и на что ориентироваться

Популярные php framework. Какой PHP-фреймворк выбрать для изучения? Что же изучать и на что ориентироваться

Как мы все знаем, PHP является наиболее популярным и удобным языком программирования сценариев. Он делает процесс разработки гораздо проще и помогает сократить затраты и время. Именно поэтому PHP всегда в центре внимания языков программирования.

С появлением PHP создания, сложные веб-проекты (в PHP) с нуля стали бессмысленным решением. Чтобы как-то структурировать процесс разработки, были созданы фреймворки PHP.

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

Давайте рассмотрим подробнее каждый из них.

# 1 Laravel

В 2015 году SitePoint признали Lavarel лучшим фреймворком для разработки PHP. Эта структура является достаточно новой (построена в 2011 году), но это уже имеет внушительную экосистему, которая выросла за последние несколько лет.

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

Lavarel имеет свой собственный механизм шаблонов «Blade» и элегантный синтаксис, который делает его наиболее легким для выполнения общих задач: аутентификация, сессии, анализ очереди, ekexitybt маршрутизации. Lavarel имеет встроенную среду программирования Homestead, которая строится в основном на «Vagrant». Все возможные случаи для этой структуры тщательно анализируются в Laracasts видео-уроках.

# 2 Symfony

Этот фреймворк PHP состоит из нескольких компонентов. Он написан в рамках PHP5, который также использует MVC. Symfony предлагает быструю разработку и веб управление, которое помогает выполнять легко рутинные задачи веб-программирования. Одно из главных его преимуществ — несколько баз данных поддержки:

    базы данных MySQL;

    базы данных PostgreSQL;

    SQLite или любой другой ПДО-совместимых баз данных.

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

Описание Symfony не будет полным без упоминания, что эта структура может гордиться огромным сообществом и большое количество поклонников.

# 3 Phalcon

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

Так как Phalcon первоначально был создан в качестве дополнения к C, его архитектура была оптимизирована для низкого уровня. Это помогает сократить потребление ресурсов, что является типичным для основанных MVC приложений.

# 4 CodeIgniter

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

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

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

# 5 Yii Framework

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

Эта структура позволяет быстро реализовать крупномасштабные пользовательские проекты, такие как интернет-порталы, CMS и другие сложные системы. Yii представляет собой набор инструментов эффективных и готовых решений. Некоторые из них:

  • ActiveRecord для реляционных и NoSQL баз данных;

  • Многоуровневая поддержка кэширования.

Выбор механизмов здесь прост, поэтому структура будет удобна тем, кто ранее занимался разработкой внешнего интерфейса. Yii имеет Gii — генератор кода, который вносит свой вклад в объектно-ориентированную разработку, быстрого прототипирования, а также предлагает веб-интерфейс пользователя, где он может генерировать необходимый код.

# 6 Zend

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

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

# 7 CakePHP

CakePHP была написана 10 лет назад в рамках программирования PHP для создания веб-проектов, и до сих пор имеет активное и растущее сообщество. Как и большинство других структур, он реализует MVC шаблон. CakePHP изначально был создан как клон популярного Ruby On Rails, и многие из идей Cake были заимствованы из RoR. Тот факт, что CakePHP поддерживает не только PHP5, но и PHP4 отличает его от других конкурентов на рынке.

Прошло десять лет, но CakePHP все еще находится в топе. С ним легко научиться работать. Такое интегрированное приложение, как CRUD незаменимо при взаимодействии с базой данных. В последних релизах CakePHP 3.x улучшено управление сессиями, а также расширены возможности создания большего числа отдельных библиотек.

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

    Ввод проверки;

    Система защиты использует введенный SQL;

    Предотвращает межсайтовый скриптинг;

    Защищает от запроса межсайтовой подделки, и многое другое.

Лучшие PHP фреймворки. Итог

Сегодня мы попытались рассмотреть наиболее популярные PHP-фреймворки. Но как насчет лучшего? Какой из них является наиболее популярным фреймворком PHP? Каждая структура имеет свои плюсы и минусы. Но вы не найдете лучший, потому что они они хороши, пусть даже есть некоторые различия между ними. На самом деле, все зависит только от потребностей клиента. Единственное, что может сделать вас уверенным в конечном продукте развития компании. Не стесняйтесь нанять команду PHP-экспертов. Мы разрабатываем продукты для стартапов, для бизнес-компаний и т.д. На протяжении многих лет мы программировали десятки программных продуктов и завершили много успешных проектов. Если вы заинтересованы в PHP продуктов свяжитесь с нами для получения более подробной информации. [email protected]

Выбор правильного фреймворка для проекта на 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 и диспетчеров.


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

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

В этой статье не рассматриваются технические термины и концепции, чтобы обеспечить ее содержание простым. Если вы программист, позвольте мне рассказать вам, почему вы должны предпочесть использовать фреймворки вместо чистого 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-фреймворк бесспорно наиболее приспособлен для изучения. Он практически всегда установлен даже на самом дешевом веб-хостинге. Он также легко устанавливается на любой рабочей машине. Новички, имеющие определенный опыт в разработке веб-страниц на HTML и CSS, смогут просто освоить основные понятия: переменные, встраиваемые условные конструкции и выражения include. PHP также предоставляет множество широко используемых функций, которые пригодятся для разработки динамических сайтов.

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

Давайте сейчас рассмотрим PHP-фреймворк, точнее 5 лучших из них, которые помогут справиться со многими проблемами при работе. Мы вкратце представим те, которые определенно стоит изучить в 2017 году, и расскажем, как именно они могут сделать разработку приложений проще. Поехали!

  1. Laravel

PHP-фреймворк существует уже довольно давно. Один из последних, новичок, — это Laravel. После выпуска 3-й версии его популярность кардинально повысилась, и на сегодняшний день это один из самых известных и распространенных фреймворков. У репозитория Laravel на GitHub рейтинг выше, чем у его более зрелых собратьев, таких как Symfony, CakePHP, CodeIgniter и Yii. О них речь пойдет позже.

Laravel повторно использует и монтирует существующие компоненты, предоставляя вам связующий слой, на базе которого вы можете более структурировано и практически создавать свои веб-приложения. Почерпнув самое лучшее из популярных фреймворков (не только на PHP, но и на других языках), Laravel предоставляет полноценный набор инструментов и архитектуру приложений, в которой собраны многие из лучших функций таких фреймворков, как CodeIgniter, Yii, ASP.NET MVC, Sinatra, Ruby on Rails и так далее.

Ниже представлен график, наглядно демонстрирующий рост популярности Laravel (источник – Google Trends). Максимальное значение (100) обозначает максимальную популярность технологии. Значение 50 говорит о том, что технология стала на 50% менее популярна, а значение 0 – о том, что популярность технологии снизилась до 1%. Все это актуально и для графиков популярности других фреймворков.

Рост популярности Laravel
(источник – Google Trends)

Большинство PHP-фреймворков используют парадигму разделения MVC (с англ. Model-View-Controller – Модель-Вид-Контроллер). Если вы когда-либо работали с одним из вышеупомянутых инструментов или знакомы с MVC, освоить Laravel 5 (самая последняя версия фреймворка) не составит труда.

  1. CodeIgniter

Как и Laravel, CodeIgniter основан на шаблоне MVC. Это такой подход к разработке ПО, который разделяет логику приложения от представления. На практике это позволяет снизить к минимуму количество сценариев на странице, поскольку представление отделено от выполнения сценариев на PHP.

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

Рост популярности CodeIgniter
(источник – Google Trends)

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

  1. Symfony

В то время как многие другие фреймворки лишь следуют правилам MVC, Symfony это фреймворк, у которого MVC лежит в основе. Возможно, это одна из причин, по которым фреймворк Laravel и такая система управления контентом (CMS), как Phpbb, переняли у Symfony многие компоненты и стали идти по его стопам.

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

Рост популярности Symfony
(источник – Google Trends)

Symfony 3 это набор изолированных и многоразово используемых компонентов, на базе которых в свое время были созданы PHP-приложения премиум класса, такие как Drupal и phpBB.

PHP-фреймворк — рассказываем о лучших из них в 2017 году

  1. Yii 2

Yii – это фреймворк обобщенного веб-программирования. Это значит, что он легко подходит для PHP-программирования для различных видов веб-приложений. Благодаря компонентной архитектуре и поддержке усовершенствованного кэширования он особенно хорош для создания крупномасштабных приложений. Например, вы сможете создавать порталы, форумы, интернет-магазины, системы управления контентом (CMS), веб-служб RESTful и так далее.

В Yii используется архитектурная модель MVC, поэтому и организация кода осуществляется на базе этого подхода.

Рост популярности Yii
(источник – Google Trends)

Yii 2 это комплексный PHP-фреймворк, который предоставляет большое количество заслуживающих доверия и готовых к работе функций. Среди них построители запросов и шаблон ActiveRecord для различных баз данных (в частности, реляционных и NoSQL), поддержка разработки веб-API RESTful, поддержка кэширования в несколько уровней и так далее.

  1. Nette

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

Nette это современный PHP-фреймворк, который поддерживает такие технологии, как AJAX / AJAJ, внедрение зависимостей, KISS, MVC, SEO, cool URL и Web 2.0.

Рост популярности Nette
(источник – Google Trends)



Новое на сайте

>

Самое популярное