Полезное

Самые популярные PHP-фреймворки 2020 года

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

Когда вы думаете о веб-разработке, помимо HTML, CSS и JavaScript, язык PHP — одно из имен, которое приходит на ум.

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

По данным W3Techs, PHP используется примерно на 79% всех веб-сайтов. Он в восемь раз популярнее, чем ASP.NET, его ближайший конкурент в серверных языках программирования.

При этом стоит отметить, что доля использования PHP за последний год оставалась неизменной.

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

 

Что такое PHP-фреймворк?

 

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

 

Зачем использовать PHP-фреймворк?

 

Существует много веских причин для использования PHP-фреймворков вместо написания кода с нуля.

 

1. Более быстрая разработка

 

Поскольку PHP-фреймворки имеют встроенные библиотеки и инструменты, на разработку требуется меньше времени.

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

 

2. Меньше кода для написания

 

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

 

3. Библиотеки для общих задач

 

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

 

4. Следование передовой практике программирования

 

PHP-фреймворки, как правило, следуют лучшим практикам кодирования. Например, они аккуратно делят код на несколько каталогов в соответствии с функцией.

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

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

 

5. Безопаснее, чем писать собственные приложения

 

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

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

 

6. Улучшенная командная работа

 

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

  • Документация
  • Дизайнерские решения
  • Стандарты кода

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

 

7. Проще в обслуживании

 

PHP-фреймворки поощряют рефакторинг кода и способствуют разработке DRY (не повторяйся. Полученная более компактная кодовая база требует меньшего обслуживания.

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

 

Что нужно знать перед использованием PHP-фреймворка

 

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

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

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

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

Полезно понимать модель объектно-реляционного отображения (ORM). ORM — это метод доступа к данным базы данных с использованием объектно-ориентированного синтаксиса вместо использования SQL. Это означает, что вы можете писать запросы к базе данных на знакомом PHP, хотя могут быть случаи, когда вы захотите использовать SQL.

Многие фреймворки PHP имеют собственный встроенный ORM. Например, Laravel использует Eloquent ORM. Другие используют ORM с открытым исходным кодом, например, Doctrine.

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

Вы, вероятно, будете выполнять большую часть своей разработки локально, поэтому вам также нужно знать о localhost (локальный хост). Другой вариант — создать и протестировать ваше приложение в виртуальной среде с помощью Vagrant и VirtualBox.

 

Архитектура MVC

 

Фреймворки PHP обычно следуют шаблону проектирования «Модель-Представление-Контроллер» (MVC). Эта концепция отделяет манипулирование данными от их представления.

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

В двух словах: Модель — это данные, Представление — это внешний вид, а Контроллер — поведение.

Аналогией шаблона MVC является заказ коктейля в баре.

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

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

  • Алкоголь
  • Фруктовый сок
  • Лед
  • Лимон
  • Стакан
  • Шейкер для коктейлей
  • Оливка
  • Мешалка

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

В терминах PHP-приложений MVC может соответствовать следующему:

  • Модель:база данных
  • Представление:HTML-страница или страницы
  • Контроллер:функции для доступа и обновления базы данных

Удобство использования интерфейса командной строки (CLI) помогает при использовании PHP-фреймворка. Laravel имеет свой собственный CLI, консоль Artisan. Используя команду make в Artisan, вы можете быстро создавать модели, контроллеры и другие компоненты для вашего проекта.

Знакомство с командной строкой также является ключом к использованию менеджера пакетов Composer PHP. Yii Framework — это один из нескольких фреймворков, использующих Composer для установки и управления зависимостями, пакетами, которые необходимы для запуска приложения.

Packagist — это основное хранилище пакетов, которые вы можете установить с помощью Composer. Некоторые из самых популярных пакетов Composer работают с фреймворком Symfony.

 

На что следует обратить внимание при использовании PHP-фреймворка?

 

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

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

Далее, вам нужен фреймворк, который прост в использовании и экономит ваше время.

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

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

Вот некоторые желательные особенности:

  • Тестирование
  • Кэш-память
  • Механизм шаблонов: способ вывода PHP в HTML с помощью класса PHP
  • Безопасность

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

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

 

Каковы лучшие PHP-фреймворки в 2020 году?

 

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

Ранние PHP-фреймворки включают PHPlib, Horde и Pear. Большинство громких имен появилось в 2005 году или позже.

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

 

Laravel

 

Laravel позиционируется как «PHP-фреймворк для веб-мастеров». Он был разработан Тейлором Отвеллом, которому нужен был фреймворк с элементами, которых не было в CodeIgniter, такими как аутентификация пользователя.

 

Краткие характеристики

 

Дата запуска: июнь 2011 г.

Текущая версия: 8, выпущена 8 сентября 2020 года.

Технические требования:

  • PHP >= 7.2.5 (или используйте Laravel Homestead)
  • Установлен Composer
  • Поддержка баз данных для MySQL 5.6+, PostgreSQL 9.4+, SQLite 3.8.8+, SQL Server 2017+.

 

Плюсы Laravel

 

Начать работу с Laravel Homestead, готовой для вас виртуальной средой разработки, несложно.

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

Если вы являетесь пользователем Mac, у вас также есть возможность использовать Laravel Valet в качестве среды разработки. Кстати, Laravel Valet поддерживает Symfony, CakePHP 3, Slim и Zend, а также WordPress.

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

Packalyst, коллекция пакетов Laravel, содержит более 15 000 пакетов, которые вы можете использовать в своих проектах.

Laravel предоставляет ряд функций и методов безопасности, охватывающих следующие аспекты:

  • Идентификация
  • Авторизация
  • Проверка электронной почты
  • Шифрование
  • Хэширование
  • Сброс пароля

Eloquent ORM и Fluent Query Builder от Laravel защищают от атак SQL-инъекций, поскольку они используют привязку параметров PDO. Защита от подделки межсайтовых запросов (CSRF), использующая скрытый маркер формы CSRF, также включена по умолчанию.

Инструмент командной строки Artisan Console, который имеет Laravel, ускоряет разработку, позволяя разработчикам автоматизировать повторяющиеся задачи и быстро генерировать скелетный код.

Экосистема Laravel имеет несколько полезных инструментов, таких как Mix для компиляции CSS и JS активов, а также Socialite для аутентификации OAuth. Кроме того, Laravel пользуется преимуществами большого сообщества разработчиков (например, WordPress).

 

Symfony

 

Symfony — это одновременно PHP-фреймворк и набор PHP-компонентов для создания веб-сайтов.

 

Краткие характеристики

 

Дата запуска: октябрь 2005 г.

Текущая версия: 5.1.4

Технические требования:

  • PHP >= 7.2.5
  • Установлен Composer

 

Плюсы Symfony

 

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

Symfony поддерживает большинство баз данных популярных PHP-фреймворков:

  • Drizzle
  • MySQL
  • Oracle
  • PostgreSQL
  • SAP Sybase SQL Anywhere
  • SQLite
  • SQLServer

Лучший способ взаимодействия с вашими базами данных — через доктрину ORM. Symfony использует шаблоны отображения данных для отображения объектов в базу данных. Это позволяет разделить вашу объектную модель и схему базы данных, а это означает, что при изменении столбца базы данных вам не нужно вносить много изменений в кодовую базу.

Отладка проектов Symfony проста с помощью встроенной панели инструментов.

Symfony использует механизм шаблонов Twig, который прост в освоении, быстр и безопасен.

В Packagist насчитывается более 4000 пакетов Symfony, доступных для загрузки и использования.

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

Кроме того, сообщество Symfony огромно, в нем активно участвуют более 600 000 разработчиков.

Среди известных имен, использующих компоненты Symfony в своих проектах, есть такие как Drupal, Joomla и Magento.

 

CodeIgniter

 

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

 

Краткие характеристики

 

Дата запуска: февраль 2006 г.

Текущая версия: 4.0.3

Технические требования:

  • PHP> = 7.2
  • Поддержка баз данных для MySQL, PostgreSQL, SQLite3

 

Плюсы CodeIgniter

 

CodeIgniter известен своей скоростью. Небольшой размер фреймворка (его размер для загрузки составляет 1,2 МБ) означает, что он не раздувается. Вы можете добавить именно те компоненты, которые вам нужны.

CodeIgniter является гибким: он поощряет разработку с использованием архитектуры MVC, но вы также можете кодировать приложения, отличные от MVC.

Фреймворк включает защиту от атак CSRF и XSS, а также контекстно-зависимое экранирование и политику безопасности контента.

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

 

Zend Framework / Laminas Project

 

Zend Framework — это давно зарекомендовавший себя PHP-фреймворк, который сейчас переходит в Laminas Project. Настоятельно рекомендуется перейти на Laminas, поскольку Zend больше не обновляется.

Laminas Project состоит из 3 частей:

  • Laminas Components иMVC
  • Mezzio
  • Laminas API Tools

 

Краткие характеристики

 

Дата запуска: март 2006 г.

Текущая версия: 3.0.0 (Zend) или 1.3.0 (Laminas)

Технические требования:

  • PHP> = 5.6 (Zend) или> = 7.3 (Laminas)
  • Установлен Composer
  • Поддержка баз данных для MariaDB, MySQL, Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL, SQLite и Informix Dynamic Server.

 

Плюсы Zend / Laminas

 

Zend Framework имеет более 570 миллионов установок.  Это также наиболее часто используемый предприятиями PHP-фреймворк.

Zend следует стандартам PHP Framework Interop Group (PHP-FIG), что означает, что его код может быть без труда перенесен на другие платформы.

Как и в Symfony, вы можете использовать только те компоненты, которые вам нужны.

Вы можете использовать Zend для создания RESTful API.

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

 

Yii (Фреймворк)

 

Название этого фреймворка, Yii, на китайском языке означает «простой и эволюционный». Это также означает «Да, это так! (Yes, It Is!)».

 

Краткие характеристики

 

Дата запуска: декабрь 2008 г.

Текущая версия: 2.0.35

Технические требования:

  • PHP> = 5.4.0, рекомендуется 7+
  • Установлен Composer
  • Поддержка баз данных для баз данных SQLite, MySQL, PostgreSQL, MSSQL или Oracle

 

Плюсы Yii

 

Вы можете начать работу с Yii за считанные минуты. Документация хорошо написана и проста в использовании.

Yii Framework имеет несколько мер безопасности, таких как хеширование паролей bcrypt, шифрование, аутентификация и авторизация. В документации предлагаются передовые методы предотвращения атак SQL-инъекций, XSS и CSRF.

Генератор кода Gii может быстро построить скелет кода для вас, экономя время.

Yii поддерживает четыре типа кеширования для ускорения работы веб-приложений: кэширование данных, кеширование фрагментов, кеширование страниц и кеширование HTTP.

Вы даже можете запускать сторонний код в проектах Yii.

 

CakePHP

 

CakePHP обеспечивает быструю и чистую разработку PHP.

 

Краткие характеристики

 

Дата запуска: апрель 2005 г.

Текущая версия: 4.1.1

Технические требования:

  • PHP 7.2 (минимум), рекомендуется 7.4
  • HTTP-сервер с предпочтительным mod_rewrite
  • Поддержка баз данных для MySQL 5.6+, MariaDB 5.6+, PostgreSQL 9.4+, SQLite 3.8, SQL Server 2012+.

 

Плюсы CakePHP

 

Конфигурация минимальная. Вам не нужно возиться с файлами XML или YAML. После настройки базы данных можно начинать кодирование.

CakePHP имеет собственную встроенную ORM, которая понятна и проста в использовании.

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

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

Github содержит полезный список ресурсов и плагинов CakePHP.

 

Slim

 

Slim — урезанный, гибкий микро PHP-фреймворк, созданный Джошем Локхартом. Он фокусируется на получении HTTP-запроса, вызове обратного вызова и возврате HTTP-ответа.

 

Краткие характеристики

 

Дата запуска: сентябрь 2010 г.

Текущая версия: 4.5.0

Технические требования:

  • PHP 7.2 +
  • Веб-сервер с перезаписью URL

 

Плюсы Slim

 

Кодовая база Slim компактна, поскольку не имеет сторонних зависимостей. В результате все происходит очень быстро.

Slim особенно подходит для создания небольших приложений и API. Если вам нужно больше от фреймворка, Slim интегрируется как с собственными, так и со сторонними компонентами.

Slim легко выучить и понять. Вы можете запустить приложение «Hello World» за считанные минуты.

Slim оценивается разработчиками как лучший PHP-фреймворк на сайте сравнения Slant.

 

Phalcon

 

Phalcon — это PHP-фреймворк, созданный для скорости работы. Он поставляется как расширение веб-сервера, написанное на Zephir и C. Знание C не требуется. Кодеры работают с классами PHP и пространствами имен, которые создает фреймворк.

 

Краткие характеристики

 

Дата запуска: ноябрь 2012 г.

Текущая версия: 4.0.6

Технические требования:

  • Расширение PSR
  • PHP 7.2 + (рекомендуется последняя версия)

 

Плюсы Phalcon

 

Phalcon разработан для быстрой работы, так как имеет следующие особенности:

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

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

Компонент безопасности Phalcon помогает с хешированием паролей и защитой от CSRF.

Механизм шаблонов Phalcon, Volt, чрезвычайно быстр и поставляется с вспомогательными классами для легкого создания представлений.

 

FuelPHP

 

FuelPHP — это управляемый сообществом PHP-фреймворк с более чем 300 участниками на протяжении всего срока его существования.

Краткие характеристики

Дата запуска: июнь 2011 г.

Текущая версия: 1.8.2

Технические требования:

  • PHP 5.4+
  • Любой веб-сервер
Плюсы FuelPHP

FuelPHP использует MVC, но также поддерживает HMVC (Иерархические «Модель-Представление-Контроллер»). Это добавляет еще один уровень между контроллером и представлением. Преимущества шаблона проектирования HMVC заключаются в следующем:

  • Лучшая организация кода
  • Большая модульность
  • Более расширяемый
  • Поощряет повторное использование кода

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

  • Кодировка вывода
  • CSRF защита
  • Фильтрация ввода, URI и XSS
  • Экранирование пользовательского ввода, переданного в операторы SQL

У FuelPHP есть собственная утилита командной строки oil, которую можно использовать для выполнения задач, отладки кода и создания общих компонентов.

FuelPHP ORM является мощным и в то же время легким.

Fat-Free Framework

Как и Slim, Fat-Free Framework (F3) — это микро-фреймворк. Он направлен на достижение баланса между полезными функциями, простотой, удобством использования и скоростью.

Краткие характеристики

Дата запуска: 2009 г.

Текущая версия: 3.7.2

Технические требования:

  • PHP 5.4+
  • Любой веб-сервер
  • Поддержка баз данных для MySQL, SQLite, MSSQL / Sybase, PostgreSQL и MongoDB.
Плюсы Fat-Free Framework

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

С Fat-Free Framework очень легко разобраться. Для начала не нужно использовать Composer или инжектор зависимостей. Вы можете создать приложение Hello World за считанные минуты.

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

Документация ясна и проста для понимания, с множеством примеров. Fat-Free Framework предлагает выбор механизма шаблонов: вы можете использовать PHP, собственный механизм шаблонов F3 или другие, такие как Smarty или Twig.

Какой фреймворк PHP лучше всего подходит для начинающих?

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

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

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

Slim устанавливается быстро и легко и у него есть руководство для версии 3. К сожалению, он не был обновлен для текущей версии 4.

Для Fat-Free Framework у вас есть выбор: установить его через Composer или просто загрузить и распаковать zip-файл. Фреймворк настраивается с помощью простой программы «Hello, world».

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

CodeIgniter также имеет довольно простую настройку с хорошей документацией.

В заключение

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

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

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

Всем успешной работы и творчества!

Источник

  • 811