Один год с Symfony
Один год с Symfony
Пишем чистый, пригодный для повторного использования код на PHP, используя Symfony
О книге
Книгу "Один год с Symfony" написал разработчик из Голландии - Matthias Noback (http://php-and-symfony.matthiasnoback.nl/). Да, она про Symfony 2 (на текущий момент еще и довольно ранних версий), но она описывает и более общие принципы разработки нежели просто версию одного фреймворка - такие как "тонкие" контроллеры, слабая связность компонентов приложения, повторное использование кода, безопасность и т.д.
Книга в английском варианте доступна бесплатно на сайте leanpub - https://leanpub.com/a-year-with-symfony).
Если вы разрабатываете код на PHP (не обязательно на Symfony) - вам точно стоит прочитать эту книгу!
Содержание
- От переводчика
- Предисловие
-
Введение
- Благодарности
- Кому предназначена эта книга
- Соглашения
- Обзор содержания книги
-
I От запроса до ответа
-
HttpKernelInterface
-
Загрузка ядра
- Бандлы и расширения контейнера
- Создание сервисного контейнера
- От Kernel до HttpKernel
-
Загрузка ядра
-
События, приводящие к ответу
-
Ранний ответ
- Слушатели kernel.request, о которых вам нужно знать
- Определение контроллера для запуска
-
Возможность замены контроллера
- Примечательные слушатели события kernel.controller
- Сбор аргументов для выполнения контроллера
- Выполнение контроллера
-
Вход в слой представления (view)
- Примечательные слушатели события kernel.view
-
Фильтрация ответа
- Примечательные слушатели события kernel.response
-
Ранний ответ
-
Обработка исключений
- Примечательные слушатели события kernel.exception
-
Подзапросы
- Когда используются подзапросы?
-
HttpKernelInterface
-
II Приёмы внедрения зависимостей
- Что такое бандл (bundle)
-
Приёмы создания сервисов
-
Обязательные зависимости
-
Обязательные параметры конструктора
- Абстрактные определения для дополнительных аргументов
-
Вызов обязательных set-методов (setters)
- Вызов методов в абстрактных сервисах
-
Обязательные параметры конструктора
-
Необязательные (опциональные) зависимости
- Необязательные аргументы конструктора
- Необязательные вызовы set-методов
-
Коллекции сервисов
- Вызов нескольких методов
- Лучшее из двух миров
- Метки сервисов (tags)
- Вызов одного метода
- Замена аргумента конструктора
- Передаём ID сервисов вместо референсов
-
Делегирование создания
- Не очень полезно…
- Иногда всё-таки полезно…
-
Создание сервисов вручную
- Определение
- Аргументы
- Таги
- Алиасы (псевдонимы)
- Класс Configuration
- Динамическое добавление тагов
- Используем паттерн Стратегия для загрузки сервисов
-
Загрузка и конфигурирование дополнительных сервисов
- Подчищаем класс конфигурации
- Конфигурируем сервис, который будем использовать
- Полностью динамическое определение сервисов
-
Обязательные зависимости
-
Приёмы создания параметров
- Файл parameters.yml
-
Определение и загрузка параметров
- Параметры для имени класса
- Сборка значений параметров вручную
- Определяем параметры в расширениях контейнера
- Переопределение параметров при помощи компилятора (compiler pass)
-
III Структура проекта
-
Организация слоёв приложения
- Тонкие контроллеры
- Обработчики форм
- Доменные менеджеры
-
События
- События уровня хранения (persistence)
-
Состояния и контекст
- Контекст безопасности
-
Запрос
-
Избегаем зависимостей от текущего запроса
- Используем слушатель (event listener)
- Предоставлять объект запроса во время выполнения
- Использование только нужных значений
-
Избегаем зависимостей от текущего запроса
-
Организация слоёв приложения
-
IV Соглашения по конфигурированию
-
Настройка конфигурации приложения
-
Локальные конфигурационные файлы
- Храните parameters.yml
- Добавьте default_parameters.yml
-
Локальные конфигурационные файлы
-
Соглашения по конфигурированию
-
Маршрутизатор
- Правила именования маршрутов
- Сервисы
- Метаданные Doctrine
-
Маршрутизатор
-
Настройка конфигурации приложения
-
V Безопасность
-
Введение
- Symfony и безопасность
-
Цели: предотвращение и ограничение
- Минимизация урона
- Оценка мер по обеспечению безопасности
- Перед тем как мы начнём…
-
Аутентификация и сессии
-
Инвалидация сессии
- Угон сесии
- Долгоиграющие сессии
-
Инвалидация сессии
-
Дизайн контроллеров
- Защита действий в контроллерах
- Размещение контроллеров за файрволлом
-
Валидация входных данных
-
Безопасные формы
- HTML5-валидация
- Ограничения валидатора
- Формы без сущности
-
Валидация значений из запроса
-
Атрибуты запроса
- Параметры маршрута
-
Query (GET) и request (POST) параметры
- Используем ParamFetcher
-
Атрибуты запроса
-
Очистка HTML
- Автоматизация очистки
-
Безопасные формы
-
Экранирование вывода
-
Twig
- Контекст экранирования
- Экранирование вывода функций
- Экранирование аргументов функций
- Опасности raw фильтра
-
Twig
-
Быть скрытным
- Маскируйте ошибки аутентификации
- Предотвращайте отображение исключений
- Настройте страницы ошибок
- Не сообщайте ничего определённого о конфиденциальных данных
-
Введение
-
VI Используем аннотации
- Введение
-
Аннотация - это простой Объект-Значение (Value Object)
-
Добавляем аттрибуты к вашим аннотациям
- Передача атрибутов через конструктор
- Заполнение публичных свойств указанными атрибутами
- Валидация при помощи @Attributes
- Валидация при помощи аннотаций @var и @Required
- Ограничения на использование аннотации
-
Добавляем аттрибуты к вашим аннотациям
-
Когда стоит использовать аннотации
- Загрузка конфигураций
- Контроль процесса выполнения приложения
-
Используем аннотации в вашем Symfony-приложении
- Реагируем на атрибуты запроса (Request): аннотация @Referrer
- Предотвращаем выполнение контроллера: аннотация @RequiresCredits
- Модифицируем ответ: аннотация @DownloadAs
- Проектирование для повторого использования
- Заключение
-
VII Быть Symfony разработчиком
-
Повторно используемый код должен иметь слабую связность
- Разделяйте код копании от кода продукта
- Разделяйте код на “библиотечный” и “бандловый”
-
Уменьшайте связность с фреймворком
- Слушатели событий (listeners) вместо подписчиков (subscribers)
- Аргументы конструктора вместо получения параметров из контейнера
- Аргументы конструктора вместо получения сервисов из контейнера
- О производительности
- Контроллеры, не зависящие от фреймворка
- Тонкие команды
- Окружение
-
Повторно используемый код должен быть легко переносимым
-
Управление зависимостями и контроль версий
- Репозитории пакетов
-
Жесткая привязка к хранилищу (базе данных)
- Сущности с автоматическим сопоставлением (auto-mapped)
- Модели, не привязанные к хранилищу
- Менеджеры объектов
-
Жесткая привязка к файловой системе
- Использование файловой системы
-
Управление зависимостями и контроль версий
-
Повторно используемый код должен быть открыт для расширения
- Настраиваемое поведение
-
Все должно быть заменяемым
- Используйте интерфейсы
- Используйте конфигурацию бандла для замены сервисов
-
Добавляйте точки расширения
- Метки (таги) сервисов
- События
-
Повторно используемый код должен быть лёгок в использовании
- Добавьте документацию
-
Создавайте полезные исключения
- Используйте специальные классы исключений
- Указывайте детальные и понятные сообщения
-
Повторно используемый код должен быть надёжным
-
Добавляйте достаточное количество тестов
- Тестируйте классы расширения и конфигурации вашего бандла
-
Добавляйте достаточное количество тестов
-
Повторно используемый код должен иметь слабую связность
-
Заключение
- Заключение от переводчика
60-дневная гарантия 100% удовлетворения от Leanpub
В течение 60 дней после покупки вы можете получить 100% возврат средств за любую покупку на Leanpub всего в два клика.
Технически это рискованно для нас, поскольку файлы книги или курса останутся у вас в любом случае. Но мы настолько уверены в наших продуктах и услугах, а также в наших авторах и читателях, что с радостью предлагаем полную гарантию возврата денег за всё, что мы продаем.
Узнать, насколько что-то хорошо, можно только попробовав, а благодаря нашей 100% гарантии возврата денег это можно сделать без всякого риска!
Так что нет причин не нажать кнопку "Добавить в корзину", не так ли?
Ознакомьтесь с полными условиями...
Получайте $8 с покупки за $10 и $16 с покупки за $20
Мы выплачиваем 80% роялти за покупки от $7.99 и выше, и 80% роялти минус фиксированную комиссию 50 центов за покупки в диапазоне от $0.99 до $7.98. Вы зарабатываете $8 с продажи за $10 и $16 с продажи за $20. Таким образом, если мы продадим 5000 невозвращенных копий вашей книги по $20, вы заработаете $80,000.
(Да, некоторые авторы уже заработали намного больше этого на Leanpub.)
Фактически, авторы заработалиболее $14 миллионов, создавая, публикуя и продавая на Leanpub.
Узнайте больше о писательстве на Leanpub
Бесплатные обновления. Без DRM.
Если вы покупаете книгу на Leanpub, вы получаете бесплатные обновления, пока автор обновляет книгу! Многие авторы используют Leanpub для публикации своих книг в процессе написания. Все читатели получают бесплатные обновления, независимо от того, когда они купили книгу и сколько заплатили (включая бесплатные книги).
Большинство книг Leanpub доступны в форматах PDF (для компьютеров) и EPUB (для телефонов, планшетов и Kindle). Форматы, в которых доступна книга, показаны в правом верхнем углу этой страницы.
Наконец, книги Leanpub не имеют никакой бессмысленной DRM-защиты, поэтому вы можете легко читать их на любом поддерживаемом устройстве.
Узнайте больше о форматах электронных книг Leanpub и где их читать