Symfony и Laravel — самые популярные PHP-фреймворки. Оба являются зрелыми и проверенными на практике, и каждый из них имеет свои преимущества и недостатки. Мы объясняем, как работают фреймворки PHP и для каких проектов лучше подходят Laravel или Symfony.
Что такое PHP и какие PHP-фреймворки существуют?
Когда PHP был выпущен в середине 1990-х годов, это был первый специализированный язык веб-программирования. «Инструменты персональной домашней страницы», как изначально назывался язык, позволяли несложным образом динамически собирать HTML-документ на сервере. Давайте посмотрим, что именно это означает.
HTML-документы составляют основу информации, найденной в Интернете. Фактический контент имеет структуру с помощью HTML-тегов. HTML становится интересным, когда программно динамический контент вставляется в статическую структуру. Именно в этом PHP был революционным. Язык может быть встроен в HTML и другие текстовые документы. Статическая структура сохранена, динамическая информация вставляется кодом, вставляемым между специальными «тегами PHP». Например, вот так может отображаться имя пользователя в приветственном сообщении:
<h1></h1> Welcome back, <!--?php echo $user ?-->
Постоянная потребность в функциях веб-приложений, таких как подключение к базе данных, аутентификация пользователя и проверка формы, привела к появлению веб-фреймворков PHP. Концептуально расположенные между библиотекой программирования и системой управления контентом, содержащиеся в ней уровни и компоненты подходят для сборки более крупных систем. В настоящее время помимо Laravel и Symfony существует ряд других зрелых PHP-фреймворков:
- CakePHP, 2005
- Symphony, 2005
- CodeIgniter, 2006
- Laminas Project — formerly Zend Framework , 2006
- Yii, 2008
- Laravel, 2011
Symfony против Laravel
Веб-фреймворки PHP Laravel и Symfony имеют много общего. Оба разрабатываются как проекты с открытым исходным кодом и подходят для создания серверных веб-приложений. Laravel и Symfony используют шаблон «Модель-Представление-Контроллер (MVC)», чтобы обеспечить разделение критических задач. Запросы к веб-приложению обрабатывает контроллер, который управляет данными о модели и представляет их в представлении:
- Модель : Модель данных и управление
- Вид : пользовательский интерфейс
- Контроллер : интерфейс между моделью и представлением
И Laravel, и Symfony сыграли важную роль в развитии экосистемы PHP. Из обоих фреймворков появились важные технологии на основе PHP, которые также используются в других проектах. В частности, Symfony славится модульной структурой несвязанных компонентов. Даже другие PHP-фреймворки, такие как Yii и Laravel, используют компоненты Symfony.
Composer — это прочная основа для управления пакетами PHP-проектов в Laravel и Symfony. В дополнение к собственно фреймворку можно устанавливать и управлять другими компонентами. Composer доступен на всех серверных операционных системах; Вот как PHP можно использовать с Composer в Ubuntu или PHP Composer можно использовать в пакетах веб-хостинга IONOS.
Здесь мы имеем в виду версии фреймворка Laravel 4+ и Symfony 2/3. Старые версии были совсем другими. Рассмотрим подробно следующие особенности Laravel и Symfony:
| Особенности | Симфония | Ларавель |
| шаблоны | Веточка | лезвия |
| ОРМ | доктрина | красноречивый |
| CLI | корзина/консоль | ремесленник |
| конфигурация | YAML | PHP |
Шаблоны в Laravel и Symfony
Идея PHP о «шаблоне» как о шаблоне, который сочетает в себе статические и динамические компоненты, была революционной. Раньше весь HTML-код приходилось программно комбинировать из статических частей и динамически генерируемых значений посредством конкатенации строк. Этот подход отнимал много времени и был подвержен ошибкам, так как было трудно его отслеживать.
Помимо встраивания кода в статический текст, значительный вклад в успех PHP внесли так называемые «включения». Команда include позволяет собрать страницу из нескольких частей набора. Таким образом, могут быть реализованы согласованные макеты, например, несколько страниц с разным содержимым, но с одним и тем же меню навигации.
Создание шаблонов — это создание HTML-документов из статических шаблонов и динамических компонентов. Если вы используете PHP непосредственно в качестве языка шаблонов, серьезные недостатки быстро становятся очевидными. Поскольку HTML, PHP, SQL, CSS и JavaScript могут быть смешаны в файле PHP, отсутствует разделение задач. Пробелы в безопасности также возникают из -за SQL-инъекций и межсайтовых сценариев (XSS).
Чтобы предотвратить эти негативные эффекты, и Laravel, и Symfony используют собственные языки шаблонов. Они принимают данные и отображают HTML. В то же время гарантируется четкое разделение задач ; вывод автоматически очищается путем так называемого «экранирования», что предотвращает внедрение кода. Сгенерированные документы PHP или HTML могут быть временно сохранены в кеше.
Язык шаблонов Symfony («Twig») позволяет создавать сложные семейства документов, включая макеты, части и компоненты. Twig содержит множество полезных фильтров и функций и опирается на простой в освоении синтаксис. Мы динамически генерируем список пользователей:
<h1>Users</h1> Users <ul></ul> {% for user in users %} <li>{{ user.name }}</li> {% endfor %}
Laravel использует специально разработанный язык шаблонов Blade. В отличие от Twig, шаблоны Blade могут содержать произвольный PHP-код. Как и в Twig, вычисляются выражения между двойными фигурными скобками и выводится результат. Тот же пример в Blade:
<h1>Users</h1> Users <ul></ul> @foreach ($users as $user) <li>{{ $user->id }}</li> @endforeach
Веб-приложения на Laravel и Symfony
Шаблонов достаточно для чисто информационных сайтов без функционала. При вызове страница собирается на сервере и доставляется посетителям. Имея слой кэша, у вас уже есть приемлемое решение. Однако веб-приложения требуют более продвинутой концепции.
Классическое веб-приложение «Web 2.0» обычно требует, чтобы пользователи могли входить в систему, создавать и изменять контент. Другими словами, требуется приложение базы данных с наиболее важными операциями базы данных CRUD. Чтобы это работало разумно для нескольких пользователей, вам нужны подходы к аутентификации, управлению правами и управлению сеансами.
В принципе, PHP содержит необходимые строительные блоки. Язык предоставляет функции для доступа к файлам cookie, управления сеансами и многого другого. Также можно управлять подключением к базе данных, выполнением запросов и доступом к значениям HTTP-запроса. Однако используется несколько абстрактных низкоуровневых функций и глобальных переменных, таких как $_GET, $_POST и $_COOKIE.
На практике команды разработчиков имели тенденцию заново изобретать колесо с каждым новым веб-приложением. Это привело к разнообразным внутренним разработкам, страдавшим от пробелов в безопасности и отсутствующей документации. Чего не хватало, так это стандартизированного подхода или прочного конструктора, содержащего необходимые качественные компоненты. Логическим следствием этого стало появление фреймворков веб-разработки.
Объектно-реляционное отображение (ORM) действует как интерфейс между объектно-ориентированным кодом и реляционной базой данных. Веб-приложение процветает благодаря взаимодействию пользователей с данными, которые со временем меняются. Как правило, прикладной уровень написан на объектно-ориентированном языке программирования, а уровень хранения основан на реляционной базе данных. И Laravel, и Symfony предлагают собственную реализацию ORM.
ORM, используемый в Symfony, называется «Doctrine» и управляется как независимый проект. Doctrine следует шаблону «Сопоставление данных» и включает в себя несколько компонентов; таким образом, в дополнение к ORM существует еще и уровень кэширования. ORM Laravel «Eloquent» следует шаблону «Active Records» и считается более простым в использовании. Оба ORM могут быть подключены к различным базам данных.
Скаффолдинг приложений в Laravel и Symfony
И Laravel, и Symfony поставляются со своим собственным интерфейсом командной строки (CLI) для управления проектами. CLI можно использовать, например, для «скаффолдинга приложений». Это означает автоматизированное построение структур проекта, таких как компоненты контроллера представления модели или модели базы данных.
Интерфейс командной строки Laravel под названием «artisan» и команда Symfony «bin/console» содержат множество полезных команд. Логично, что для доступа к CLI требуется существующее приложение Laravel или Symfony. Composer обычно используется для первоначальной установки приложения Laravel или Symfony.
Итог плюсов и минусов Laravel и Symfony
Laravel и Symfony — зрелые веб-фреймворки. Laravel считается более простым и лучше подходит для небольших проектов. Неглубокая кривая обучения и быстрые результаты способствовали успеху самого популярного PHP-фреймворка.
Symfony славится своими несвязанными компонентами. Их можно использовать вместе как веб-фреймворк или по отдельности как часть пользовательского программного обеспечения. В то время как Laravel фокусируется на простоте, Symfony стремится к гибкости. Это делает фреймворк более подходящим для сложных проектов с особыми требованиями.
Мы представляем преимущества и недостатки в сравнении Symfony и Laravel :
| Критерии | Symphony | Laravel |
| набор функций | +++ | ++ |
| зрелость | +++ | +++ |
| простота | + | ++ |
| гибкость | +++ | + |
| юзабилити | + | +++ |
| сообщество | ++ | +++ |
Заключение
Когда вы должны использовать какой фреймворк? Короче говоря, Laravel — лучший выбор для начинающих и небольших проектов. Symfony имеет модульную структуру и может быть гибко адаптирована к соответствующим условиям. Поэтому он особенно подходит для сложных приложений.








