17 преимуществ Laravel

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

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

Перечислим наиболее популярные у разработчиков PHP-фреймворки:

1. Laravel
2. CodeIgniter
3. Symfony
4. Zend
5. Phalcon
6. CakePHP
7. Yii
8. FuelPHP

Этот список можно продолжить, но почему при таком изобилии первую строчку в нем занимает Laravel? Что в нем особенного?

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

Дело было так. Француз Фабьен (разработчик Symfony) во второй версии буквально разобрал свое творение на запчасти. Он полностью переписал, сделав его составные части максимально независимыми друг от друга. В результате фреймворк превратился в своеобразное «лего». Symfony стал набором компонентов, которые можно разбирать и собирать заново, но уже в другой конфигурации - строить из них что угодно. Что и сделал Тейлор Отвел, создав значительную часть Laravel из деталей Symfony, улучшив некоторые из них и добавив свои.

Итак, какие же преимущества в результате приобрел в результате сам Laravel и его многочисленные пользователи?

1. Высокая безопасность

Не секрет, что массу головной боли разработчикам веб-приложений со всего мира доставляют две основные группы уязвимостей: SQL-инъекции и кросс-сайтовый скриптинг.

Первая угроза связана с возможностью передачи строки злонамеренного SQL-кода через параметры HTTP запроса. Если система не осуществляет проверку параметров, приходящих от пользователя, то этот запрос может просочиться в СУБД и запуститься.

Laravel предотвращает саму возможность таких атак благодаря использованию концепции ORM (Object-Relational Mapping - объектно-реляционное отображение) которая, по умолчанию, исключает возможность «сырых» SQL-запросов, а все параметры при построении SQL запроса приводятся к единому виду - из них удаляется все, что может навредить данным.

Вторая группа угроз практикует внедрение вредоносного кода JavaScript на произвольную страницу сайта, в результате чего злоумышленник может получить и затем подделать данные Cookies. То есть он получает доступ к сайту с привилегиями того пользователя, на чьей странице произошло выполнение внедренного javascript-а. То есть пользователь об этом может и вовсе не подозревать. Такие уязвимости купируются путем экранирования запрещенных html-тегов (в частности тега script) и вывода экранированной строки в виде обычного текста, исключив возможность его выполнения.

Также Laravel обеспечивает защиту от CSRF-атак (Cross-Site Request Forgery), когда из-за недостатков протокола HTTP пользователь может быть перенаправлен на сайт, созданный злоумышленником, который от лица жертвы тайно отправляет запрос на другой сервер, осуществляющий некую вредоносную операцию.

2. Повышенная производительность. Кеширование

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

По умолчанию в Laravel используется кеширование на уровне файловой системы, но можно использовать и более производительные инструменты, например, нереляционные базы данных (REDIS, Memcache или APC). Эти решения известны тем, что хранят данные пар «ключ-значение» прямо в оперативной памяти сервера, что существенно сокращает время доступа к данным и дает возможность кешировать не только целые страницы, или их части, но и массивы объектов, результирующих запросы к базе данных - это уменьшает количество SQL-запросов и ускоряет загрузку страниц. При таком подходе умение правильно инвалидировать кеш и вовремя удалять устаревшие данные в случае их изменении становится для разработчика своего рода искусством.

Также стоит отметить, что в Laravel возможно кэширование отдельных вычисляемых компонентов системы (views, configs, routes), когда приложение один раз вычисляет все необходимое для работы этих компонентов, а потом сохраняет в отдельные файлы и в дальнейшем использует их опуская все сложные и ресурсоемкие вычисления.

3. Аутентификация

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

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

4. Открытый код и большое комьюнити

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

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

5. Шаблонизатор blade

Ключевая особенность Laravel - использование шаблонизатора blade. С его помощью можно стандартизировать и многократно использовать один и тот же шаблон в разных частях приложения. При этом шаблоны полностью отделены от бизнес-логики. Это значит, что из них можно создать любую иерархическую структур, сведя дублирование кода к минимуму. Полное отделение шаблонов от бизнес логики делает задачу по редизайну (которая рано или поздно возникнет) гораздо проще. В итоге не понадобится полностью пересобирать сайт (как это обычно происходит с битриксом, потому как там такого строгого разделения нет), достаточно будет только пересобрать шаблоны.

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

6. Миграции баз данных

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

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

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

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

7. MVC-архитектура

По данным всезнающей Вики архитектура Model-View-Controller (MVC) предполагает разделение данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо.

Фреймворк Laravel реализует данный подход в полной мере, в отличии, например, от битрикса, где архитектура MVC реализована только на словах.

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

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

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

8. Объектно-ориентированные библиотеки

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

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

9. Юнит-тесты

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

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

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

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

Таким образом приложение уже настроено для написания тестов (причем, как юнит, так и интеграционных, так и end-to-end (с помощью Laravel Dusk) тестов), что делает их написание очень простым. Но. Их все еще нужно писать, причем параллельно с сами приложением. Если не выделять на это времени (считай, сэкономить), то они станут бесполезными (а писать тесты после разработки, а не во время, будет сложнее и дольше).

10. Перспективные приложения

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

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

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

11. Дружественный код

Когда разработчики готовят библиотеки для распространения и многократного использования, они стремятся написать код таким образом, чтобы он не только выполнял возложенные на него функции, но и был понятен остальным программистам.

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

12. Мультиязычность

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

13. Интеграция с mail-сервисом

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

Фреймворк Laravel предоставляет понятный и простой API поверх популярной библиотеки SwiftMailer. Также в нем есть драйвера к SMTP, Mailgun, Mandrill, SparkPost, Amazon SES, таким функциям PHP, как mail и sendmail. Все это позволяет приложению отправлять почту локально либо через облачные сервисы. В дополнение, Laravel предоставляет поддержку отсылки уведомлений через множество других каналов доставки, включая SMS и Slack.

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

14. Ошибки и исключения

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

Также во фреймворке присутствует возможность интеграции со сторонними сервисами по отслеживанию ошибок, таких, как sentry или rollbar.

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

15. Система отложенных задач

Эй на УАЗике - в очередь! В Laravel реализована система организации очередей из долгоиграющих процессов и удобный API для множества разных бэкендов по управлению этими очередями. Этот механизм позволяет откладывать выполнение процессов, которые занимают продолжительное время с тем, чтобы не тормозить выдачу страниц пользователю.

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

16. Запуск задач по расписанию

Раньше для составления расписания выполнения каждой задачи разработчики были вынуждены создавать экземпляр Cron непосредственно на сервере. Это было той еще головной болью т. к. требовалось каждый раз заходить на сервер через ssh-соединение, читать мануалы по cron, редактировать crontab и так далее.

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

17. Скорость разработки

Современный бизнес нуждается в решениях, обеспечивающих максимально быстрое внедрения новых технологий. А мощный и гибкий фреймворк позволяет веб-разработчикам держаться на плаву и успешно конкурировать на рынке IT-технологий. Использование Laravel позволяет значительно ускорить процесс разработки чтобы выполнить все задачи в кратчайшие сроки, особенно если использовать Laravel Nova в качестве админки.

Выводы

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