Книга один год с Symfony

Один год с Symfony. На самом деле, для меня это был даже не год, а почти 6 лет. Начинал я с symfony 1 (именно так, с маленькой буквы и отдельно стоящая единичка), потом продолжил с Symfony2. Symfony2 — это то, что можно охарактеризовать как «взрослый» фреймворк, с его помощью вы можете делать весьма продвинутые вещи. И когда вы захотите сделать что-нибудь продвинутое, вам даже не обязательно устанавливать весь фреймворк, вы можете воспользоваться одним или несколькими из его компонентов.

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

В то же время я много писал о Symfony2, внося вклад в его документацию (конкретно — некоторые статьи из Cookbook и документацию на Security и Config компоненты), я запустил свой блог со статьями о PHP в общем, Symfony2, его компонентах и сопутствующих фреймворках и библиотеках, таких как Silex и Twig. И я стал Сертифицированным разработчиком Symfony2 во время самой первой экзаменационной сессии в Париже, на Symfony Live Conference в 2012 году.

Всё это нашло отражение в книге, которую вы сейчас читаете — «Один год с Symfony». Она содержит многие из лучших практик, которые я и мои уважаемые коллеги из IPPZ разработали, трудясь над крупными приложениями на Symfony2. Она также наделит вас более глубокими познаниями, которые вам потребуются, когда вы копнёте чуть глубже, чем просто написание контроллеров или шаблонов.

Благодарности

Прежде чем я продолжу, позвольте мне поблагодарить несколько человек, которые помогли мне закончить эту книгу. В первую очередь, Luis Cordova, который следовал по моим стопам с тех пор как, я впервые начал писать о Symfony 2 в 2011. Он провел исчерпывающий анализ первых черновиков. Мои коллеги из IPPZ также предоставили мне очень ценные замечания, воодушевляя меня делать некоторые вещи более понятными, а другие — более интересными: Dennis Coorn, Matthijs van Rietschoten и Maurits Henneke. Работая с ними два года, разделяя с ними опасения по поводу поддерживаемости, читабельности, повторного использования и прочих насущных вопросов, таких как смехотворность (@dbykadorov: здесь речь шла о всяких «*bilities», например «laughability», не уверен в корректности перевода), я получил массу положительных эмоций. Также хочу поблагодарить Lambert Beekhuis, организатора митапов датской юзергруппы Symfony2, за то, что дал мне очень ценные советы касательно моего английского.

Кому предназначена эта книга

Я написал эту книгу для разработчиков, которые хорошо знают PHP, но с Symfony2 знакомы несколько недель, может быть месяцев. Я предполагаю, что вы прочли официальную документацию Symfony2 и уже знакомы с основами создания приложения на Symfony2. Я также полагаю, что вы уже знаете базовую структуру приложения (стандартную структуру директорий, как создать или подключить бандл), как создать контроллер и сконфигурировать маршрутизатор для него, как создавать формы и Twig шаблоны.

Я также полагаю, что вы успели поработать с какой-либо библиотекой для взаимодействия с базами данных, например Doctrine ORM, Doctrine MongoDB ODM, Propel, и так далее. Тем не менее, в этой книге для упрощения я буду использовать только Doctrine. Если вы используете другую библиотеку для сохранения объектов, вы, вероятно, сможете разобраться, как применить идеи, изложенные в этой книге, к коду, написанному под вашу библиотеку.

Соглашения

Так как эта книга только про Symfony 2, с данного момента я буду писать просто «Symfony» — это выглядит более элегантно. Всё, что я скажу о Symfony, будет относиться к версии 2. Я написал и протестировал примеры кода для этой книги на Symfony 2.3. Тем не менее, они могут быть вполне применимы к Symfony 2.1.* и 2.2.* и, возможно, к Symfony 2.0.* (версия 3 конечно имеет отличия от версии 2, но большинство сказанного, особенно базовые принципы разработки типа «low coupling» — будут также справедливы и для неё. Я постараюсь отметить эти отличия в ходе перевода и протестировать все примеры на Symfony 3.2).

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

Обзор содержания книги

Первая часть этой книги называется «путешествие от запроса до ответа». Она проведёт вас от точки входа в приложение Symfony во фронт-контроллере до последнего вздоха, который фреймворк делает перед тем, как отправить ответ клиенту. Я покажу, как внедриться в этот процесс и модифицировать его, или же изменить результаты его промежуточных шагов.

Следующая часть называется «Шаблоны внедрения зависимостей». Она содержит коллекцию шаблонов, которые являются решениями проблем, периодически возникающих в приложении при создании или модификации сервисов, основанных на конфигурации бандла. Я покажу вам много практических примеров, которые вы сможете использовать для создания расширений, конфигурацонных классов и проходов компилятора (compiler passes) для ваших бандлов.

Третья часть будет посвящена структуре проекта. Я предложу различные способы, как сделать ваши контроллеры более понятными, путём делегирования действий обработчикам форм (form handlers), доменным менеджерам (domain managers) и слушателям событий (event listeners). Мы также посмотрим на состояния и как избежать их на сервисном уровне вашего приложения.

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

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

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

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

Наслаждайтесь!