Вступление

Symfony - это набор автономных, отделённых и связанных PHP-компонентов, которые решают общие проблемы веб-разработки.

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

Почему вы хотите создать ваш собственный фреймворк?

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

  • Узнать больше о низкоуровневой архитектуре современных веб-фреймворков в общем, и о внутренних частях комплексного фреймворка в частности;
  • Создать фреймворк, подогнанный под ваши нужды (только убедитесь вначале, ваши нужды очень конкретны);
  • Экспериментировать, создавая фреймворки для развлечения (в подходе научиться- и-выбросить);
  • Реорганизовать старое/существующее приложение, которое требует хорошей дозы современных лучших практик веб-разработки;
  • Доказать миру, что вы действительно можете самостоятельно создать фреймворк (... но с небольшими усилиями).

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

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

Tip

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

Многие современные веб-фреймворки рекламируют себя, как MVC-фреймворки. Этот туториал не будет говорить о MVC-схеме, так как Компоненты Symfony могут создать любой тип фреймворка. В любом случае, если вы посмотрите на семантику MVC, то эта книга о том, как создать часть Контроллера в фреймворке. Для Модели и Просмотра, всё действительно зависит от вашего вкуса и вы можете использовать любые существующие сторонние библиотеки (Doctrine, Propel или старый добрый PDO для Модели; PHP или Twig для Просмотра).

При создании фреймворка, следующая MVC-схема не является правильной целью. Главной целью должно быть Разделение функциональности; Это скорее всего единственная схема дизайна, о которой вам стоит беспокоиться. Фундаментальные принципы Копомнентов Symfony сфокусированы на HTTP-спецификации. Таким образом, фреймворк, который вы будете создавать, должен быть точнее обозначен как HTTP-фреймворк или фреймворк Запроса / Ответа.

До того, как вы начнёте

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

Готовы? Продолжайте читать!

Начальная загрузка

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

Чтобы хранить ваш новый фреймворк, создайте каталог где-то в вашем компьютере:

1
2
$ mkdir framework
$ cd framework

Управление зависимостями

Чтобы установить Компоненты Symfony, которые вам нужны для вашего фреймворка, вы будете использовать Composer, менеджер зависимостей проекта для PHP. Если у вас его ещё нет, скачайте и установите Composer сейчас.

Наш проект

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

1
2
3
4
// framework/index.php
$input = $_GET['name'];

printf('Hello %s', $input);

Вы можете использовать встроенный PHP-сервер, чтобы тестировать это великолепное приложение в браузере (http://localhost:4321/index.php?name=Fabien):

1
$ php -S 127.0.0.1:4321

В других случаях, вы всегда можете использовать собственный сервис (Apache, Nginx, и т.д.).

В следующей главе, мы представим вам Компонент HttpFoundation и увидим, что он нам принесёт.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.