Один год с 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 и где их читать


