Главная страница
qrcode

Фабьен Потенсье - Symfony 5. Быстрый старт - 2020. Symfony Быстрый стартisbn-13 978-2-918390-42-8current Generated on February 13, 2020Symfony sas


Скачать 16.44 Mb.
НазваниеSymfony Быстрый стартisbn-13 978-2-918390-42-8current Generated on February 13, 2020Symfony sas
Дата14.09.2020
Размер16.44 Mb.
Формат файлаpdf
Имя файлаФабьен Потенсье - Symfony 5. Быстрый старт - 2020.pdf
оригинальный pdf просмотр
ТипДокументы
#70726
страница1 из 15
Каталог
  1   2   3   4   5   6   7   8   9   ...   15
Symfony 5.
Быстрый старт
Fabien Potencier https://fabien.potencier.org/
@fabpot
@fabpot
Symfony 5. Быстрый старт
ISBN-13: 978-2-918390-42-8
current — Generated on February 13, 2020
Symfony SAS
92-98, boulevard Victor Hugo
92 110 Clichy
France
This work is licensed under the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)”
license (https://creativecommons.org/licenses/by-nc-sa/4.0/).
Below is a human-readable summary of (and not a substitute for) the license (https://creativecommons.org/
licenses/by-nc-sa/4.0/legalcode).
You are free to
Share — copy and redistribute the material in any medium or format
Adapt — remix, transform, and build upon the material
Attribution: You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
Non Commercial: You may not use the material for commercial purposes.
Share Alike: If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Symfony shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work.
If you find typos or errors, feel free to report them at support@symfony.com. This book is continuously updated based on user feedback.
Оглавление
Шаг 0: О чём эта книга?
......................................................................................27Шаг 1: Проверка рабочего окружения
................................................................31Шаг 2: Знакомство с проектом...........................................................................37Шаг 3: С нуля до развёртывания .........................................................................43Шаг 4: Выбор методологии разработки ............................................................51Шаг 5: Поиск и устранение неисправностей .....................................................53Шаг 6: Создание контроллера .............................................................................63Шаг 7: Подготовка базы данных.........................................................................71Шаг 8: Описание структуры данных..................................................................79Шаг 9: Создание административной панели .....................................................93Шаг 10: Создание пользовательского интерфейса .........................................101Шаг 11: Работа с ветками ................................................................................115Шаг 12: Обработка событий ............................................................................123Шаг 13: Жизненный цикл объектов Doctrine....................................................129Шаг 14: Получение обратной связи с помощью форм ....................................139Шаг 15: Защита административной панели ...................................................155Шаг 16: Защита от спама с помощью API ......................................................163Шаг 17: Тестирование ........................................................................................171Шаг 18: Переход к асинхронности ....................................................................189Шаг 19: Управление состоянием с помощью Workflow...................................207Шаг 20: Отправка электронной почты администраторам..........................213Шаг 21: Повышение производительности с помощью кеширования ............227Шаг 22: Стилизация интерфейса с помощью Webpack ..................................245Шаг 23: Изменение размера изображений .......................................................251Шаг 24: Выполнение заданий cron .....................................................................257Шаг 25: Уведомление различными способами..................................................265Шаг 26: Создание API с помощью API Platform...............................................281Шаг 27: Разработка SPA....................................................................................291Шаг 28: Локализация приложения.....................................................................311
Шаг 29: Оптимизация производительности ...................................................325Шаг 30: Изучение внутренностей Symfony.......................................................337Шаг 31: Что дальше? .........................................................................................343
Содержание
Шаг 0: О чём эта книга? ......................................................................................27Шаг 1: Проверка рабочего окружения ................................................................311.1: Компьютер..................................................................................................311.2: Используемые технологии .........................................................................321.3: IDE................................................................................................................321.4: Терминал......................................................................................................321.5: Git .................................................................................................................331.6: PHP ..............................................................................................................331.7: Composer......................................................................................................331.8: Docker и Docker Compose...........................................................................341.9: Symfony CLI .................................................................................................34Шаг 2: Знакомство с проектом...........................................................................372.1: Определение цели проекта ........................................................................372.2: Обучение на практике................................................................................382.3: Итоговая диаграмма структуры проекта .............................................382.4: Получение исходного кода проекта..........................................................402.5: Навигация по коду ......................................................................................41Шаг 3: С нуля до развёртывания .........................................................................433.1: Инициализация проекта.............................................................................443.2: Создание публичных ресурсов ...................................................................463.3: Запуск локального веб-сервера ..................................................................463.4: Добавление фавиконки ...............................................................................473.5: Подготовка к развёртыванию в продакшене ..........................................483.6: Развёртывание в продакшене ...................................................................49
Шаг 4: Выбор методологии разработки ............................................................514.1: Стратегия использования Git ...................................................................514.2: Развёртывание в продакшене с помощью непрерывной интеграции ...52Шаг 5: Поиск и устранение неисправностей .....................................................535.1: Установка дополнительных зависимостей.............................................535.2: Понимание окружений Symfony ................................................................545.3: Управление конфигурациями окружений.................................................555.4: Логирование всех действий .......................................................................565.5: Изучение средств отладки Symfony .........................................................565.6: Настройка среды разработки ..................................................................605.7: Отладка в продакшене...............................................................................60Шаг 6: Создание контроллера .............................................................................636.1: Ускорение разработки с помощью бандла Maker...................................636.2: Выбор формата конфигурации.................................................................646.3: Генерация контроллера .............................................................................656.4: Добавление пасхального яйца ....................................................................67Шаг 7: Подготовка базы данных.........................................................................717.1: Добавление PostgreSQL в Docker Compose...............................................717.2: Запуск Docker Compose ..............................................................................727.3: Обращение к локальной базе данных........................................................737.4: Добавление PostgreSQL в SymfonyCloud ...................................................737.5: Доступ к базе данных на SymfonyCloud ...................................................757.6: Просмотр переменных окружения...........................................................76Шаг 8: Описание структуры данных..................................................................798.1: Настройка Doctrine ORM..........................................................................798.2: Разбираемся в соглашениях по именованию переменных окружения вSymfony ................................................................................................................808.3: Изменение начального значения DATABASE_URL в файле .env ............818.4: Создание классов сущностей ....................................................................818.5: Связывание сущностей ..............................................................................858.6: Добавление дополнительных свойств ......................................................898.7: Миграция базы данных...............................................................................898.8: Обновление локальной базы данных .........................................................90
8.9: Обновление базы данных в продакшене ...................................................91Шаг 9: Создание административной панели .....................................................939.1: Настройка бандла EasyAdmin...................................................................939.2: Настройка EasyAdmin................................................................................97Шаг 10: Создание пользовательского интерфейса .........................................10110.1: Установка Twig ......................................................................................10210.2: Использование Twig для шаблонов........................................................10210.3: Использование Twig в контроллере ......................................................10310.4: Создание страницы для конференции ..................................................10510.5: Перелинковка страниц...........................................................................10810.6: Постраничный вывод комментариев...................................................10810.7: Рефакторинг контроллера....................................................................112Шаг 11: Работа с ветками ................................................................................11511.1: Организация рабочего процесса с помощью Git..................................11611.2: Описание инфраструктуры ..................................................................11611.3: Создание веток.......................................................................................11611.4: Хранение сессий в Redis .........................................................................11611.5: Развёртывание ветки ............................................................................11811.6: Предварительная отладка развёртывания в продакшене.................12011.7: Предварительное тестирование развёртывания в продакшене ......12111.8: Развёртывание в продакшене ...............................................................12111.9: Очистка...................................................................................................121Шаг 12: Обработка событий ............................................................................12312.1: Добавление шапки сайта .......................................................................12312.2: Исследуем события Symfony .................................................................12512.3: Реализация подписчика ..........................................................................12512.4: Сортировка конференций по годам и городам....................................127Шаг 13: Жизненный цикл объектов Doctrine....................................................12913.1: Определение обратных вызовов событий жизненного цикла ...........12913.2: Добавление слагов для конференций .....................................................13013.3: Генерация слагов.....................................................................................13313.4: Определение сложных обратных вызовов жизненного цикла...........13413.5: Настройка сервиса в контейнере.........................................................135
13.6: Использование слагов в приложении ....................................................136Шаг 14: Получение обратной связи с помощью форм ....................................13914.1: Создание типа формы ...........................................................................13914.2: Отображение формы ............................................................................14114.3: Настройка типа формы........................................................................14314.4: Валидация моделей .................................................................................14414.5: Обработка формы .................................................................................14614.6: Загрузка файлов ......................................................................................14814.7: Отладка форм ........................................................................................14914.8: Отображение загруженных фотографий в административной................................................................................................................15114.9: Игнорирование загруженных фотографий в Git ................................15214.10: Хранение загруженных файлов в продакшене...................................152Шаг 15: Защита административной панели ...................................................15515.1: Определение сущности для пользователей..........................................15515.2: Создание пароля для администратора................................................15715.3: Создание администратора ...................................................................15815.4: Настройка аутентификации................................................................15815.5: Добавление правил контроля доступа для авторизации ...................16015.6: Аутентификация через форму входа ...................................................161Шаг 16: Защита от спама с помощью API ......................................................16316.1: Регистрация в Akismet ...........................................................................16316.2: Добавление компонента Symfony HTTPClient .....................................16416.3: Создание класса для проверки на спам.................................................16416.4: Использование переменных окружения................................................16616.5: Хранение конфиденциальных данных ...................................................16716.6: Проверка комментариев на спам .........................................................16816.7: Управление конфиденциальными данными в продакшене..................169Шаг 17: Тестирование ........................................................................................17117.1: Написание модульных тестов ..............................................................17117.2: Написание функциональных тестов для контроллеров.....................17417.3: Определение фикстур ............................................................................17517.4: Применение фикстур .............................................................................17817.5: Сканирование сайта в функциональных тестах ................................178
17.6: Работа с тестовой базой данных ........................................................17917.7: Отправка формы в функциональном тесте .......................................18017.8: Выгрузка фикстур ..................................................................................18217.9: Автоматизация рабочего процесса с помощью Make-файлов ..........18217.10: Очистка базы данных после каждого теста ...................................18317.11: Использование настоящего браузера для функциональных..............................................................................................................18517.12: Выполнение функциональных тестов по принципу чёрного ящика с............................................................................................186Шаг 18: Переход к асинхронности ....................................................................18918.1: Установка статусов комментариев ...................................................18918.2: Внедрение компонента Messenger ........................................................19318.3: Создание обработчика сообщений.......................................................19318.4: Сокращение количества отображаемых комментариев..................19718.5: Переходим к асинхронности по-настоящему .....................................19718.6: Добавление RabbitMQ в Docker .............................................................19818.7: Перезапуск сервисов Docker ..................................................................19818.8: Получение сообщений.............................................................................19918.9: Знакомство с панелью управления RabbitMQ......................................20018.10: Запуск воркеров в фоновом режиме ...................................................20118.11: Повторная обработка сообщений в случае ошибки.........................20318.12: Развёртывание RabbitMQ....................................................................20418.13: Выполнение воркеров на SymfonyCloud ..............................................205Шаг 19: Управление состоянием с помощью Workflow...................................20719.1: Определение бизнес-процессов ..............................................................20819.2: Использование бизнес-процессов ..........................................................209Шаг 20: Отправка электронной почты администраторам..........................21320.1: Установка адреса электронной почты для администратора .........21420.2: Отправка уведомления по электронной почте ...................................21520.3: Расширение шаблона электронной почты для уведомлений .............21620.4: Создание абсолютных адресов с помощью команды .........................21820.5: Подключение маршрута к контроллеру ..............................................21920.6: Использование перехватчика почты....................................................22120.7: Доступ к почтовому веб-сервису..........................................................22120.8: Управление долго выполняющимися скриптами .................................223
20.9: Асинхронная отправка электронной почты .......................................22320.10: Тестирование электронной почты ....................................................22420.11: Отправка электронной почты в SymfonyCloud ................................225Шаг 21: Повышение производительности с помощью кеширования ............22721.1: Добавление заголовков кеширования HTTP .........................................22821.2: Активация ядра HTTP-кеширования в Symfony...................................22921.3: Кеширование SQL-запросов при помощи ESI ......................................23021.4: Очистка HTTP-кеша для тестирования..............................................23521.5: Группировка схожих маршрутов по префиксу ...................................23721.6: Кеширование операций с большим потреблением ресурсов ЦПУ/..............................................................................................................23821.7: Профилирование и сравнение производительности ...........................24021.8: Настройка кеширующего обратного прокси-сервера в.......................................................................................................24021.9: Включение поддержки ESI в Varnish ....................................................24121.10: Инвалидация кеша Varnish...................................................................242Шаг 22: Стилизация интерфейса с помощью Webpack ..................................24522.1: Использование Sass.................................................................................24622.2: Эффективное использование Bootstrap................................................24722.3: Стилизация HTML-шаблона..................................................................24822.4: Сборка ресурсов......................................................................................248Шаг 23: Изменение размера изображений .......................................................25123.1: Оптимизация изображений с помощью Imagine ................................25323.2: Добавление нового шага в бизнес-процесс ...........................................25423.3: Хранение загруженных данных в продакшене.....................................255Шаг 24: Выполнение заданий cron .....................................................................25724.1: Очистка ненужных комментариев ......................................................25724.2: Использование констант класса, параметров контейнера и........................................................................25924.3: Создание CLI-команды ..........................................................................25924.4: Настройка cron в SymfonyCloud ...........................................................261Шаг 25: Уведомление различными способами..................................................26525.1: Отправка уведомлений в браузере........................................................266
25.2: Уведомление администраторов по электронной почте....................27025.3: Отправка уведомлений в чаты для администраторов......................27325.4: Включение асинхронного режима для всех каналов............................27925.5: Уведомление пользователей по электронной почте ..........................280Шаг 26: Создание API с помощью API Platform...............................................28126.1: Установка API Platform.........................................................................28126.2: Создание API для работы с конференциями .......................................28226.3: Создание API для комментариев ..........................................................28526.4: Ограничение отображения комментариев из API .............................28726.5: Настройка CORS....................................................................................289Шаг 27: Разработка SPA....................................................................................29127.1: Создание приложения ............................................................................29127.2: Создание основного шаблона для SPA..................................................29327.3: Запуск SPA в браузере ............................................................................29427.4: Добавление маршрутизатора для обработки состояний .................29527.5: Стилизация SPA......................................................................................29727.6: Получение данных при помощи API ......................................................29927.7: Развёртывание SPA в продакшене .......................................................30527.8: Настройка CORS для SPA .....................................................................30727.9: Сборка приложения для смартфона с помощью Cordova.................308Шаг 28: Локализация приложения.....................................................................31128.1: Интернационализация URL-адресов ....................................................31128.2: Добавление переключателя локали .......................................................31428.3: Перевод интерфейса ..............................................................................31628.4: Добавление переводов.............................................................................31928.5: Перевод форм..........................................................................................32028.6: Локализация дат.....................................................................................32128.7: Перевод сообщений во множественном числе....................................32128.8: Обновление функциональных тестов...................................................323Шаг 29: Оптимизация производительности ...................................................32529.1: Знакомство с Blackfire ...........................................................................32629.2: Установка Blackfire-агента в Docker...................................................32729.3: Исправление неработающей установки Blackfire...............................32829.4: Настройка Blackfire в продакшене.......................................................329
29.5: Настройка Varnish для работы с Blackfire .........................................32929.6: Профилирование веб-страниц...............................................................33029.7: Профилирование API-ресурсов..............................................................33129.8: Сравнение производительности ...........................................................33229.9: Написание функциональных тестов по принципу чёрного ящика ....33229.10: Автоматизация проверок производительности...............................334Шаг 30: Изучение внутренностей Symfony.......................................................33730.1: Разбираемся во внутренностях Symfony и Blackfire...........................33830.2: Использование отладчика Blackfire Debug Addon...............................341Шаг 31: Что дальше? .........................................................................................343
Благодарности
Я люблю книги. Книги, которые я могу держать в руках.
Последний раз я писал книгу про Symfony ровно 10 лет назад. Тогда в ней рассматривался Symfony 1.4. С тех пор я никогда не писал о
Symfony!
Я был так рад снова написать о Symfony, что закончил первый черновик за неделю. На версию, которую вы сейчас читаете, ушло намного больше времени. Написание книги занимает много времени и сил. От дизайна обложки до макета страницы. От поправок в коде до рецензий коллег. Это может продолжаться практически бесконечно.
Вы всегда можете дополнить раздел, улучшить определённый кусок кода, исправить опечатки или переписать объяснение, чтобы сделать его короче и лучше.
Написание книги — это путешествие, которое не стоит совершать в одиночку. Огромное число людей прямо или косвенно помогли в этом нелёгком деле. Спасибо каждому из них!
Я искренне хочу поблагодарить всех прекрасных людей, которые потратили много времени на рецензию текста, чтобы найти опечатки и улучшить содержание; некоторые даже помогли мне написать фрагменты кода:
Javier Eguiluz
Ryan Weaver
Titouan Galopin
Nicolas Grekas
Kévin Dunglas
Tugdual Saunier xvii
Grégoire Pineau
Alexandre Salomé
xviii
Переводчики
Официальная документация Symfony доступна только на английском языке. В прошлом у нас были переводы документации, но мы решили отказаться от них, так как они всегда отставали от оригинала. А
устаревшая документация — это ещё хуже, чем её отсутствие.
Главная проблема с переводами — это их поддержка. Документация
Symfony обновляется каждый день десятками разработчиков.
Практически невозможно иметь команду волонтёров, которая бы могла переводить все изменения в режиме реального времени.
Однако задача по переводу книги, которую вы сейчас читаете, более выполнима, так как я пытался написать о том, что не будет сильно меняться со временем. Поэтому содержание книги должно быть достаточно актуальным в течение долгого времени.
Но зачем нам вообще в техническом мире, где английский язык дефакто основной язык, документация на других языках? Symfony используется разработчиками по всему миру. Некоторым из них не так комфортно читать на английском. Перевод раздела документации
Getting Started (для тех, кто только начинают работу с фреймворком)
— это часть программы Symfony по этническому разнообразию
(Symfony Diversity), в которой мы стремимся найти способы сделать
Symfony как можно доступнее для всех.
Как вы можете себе представить, перевод более 300 страниц — это огромная работа, и я хочу поблагодарить всех, кто помог перевести эту книгу:
Sergey Panteleev
Dmitry Naydonov
Alexey Pyltsyn
VladimirAus
Stan Drozdov
Egor Ushakov
Sergey Kamardin
Andrey Bocharov xix
Спонсоры среди компаний
Эту книгу финансово поддержали https://packagist.com/
Спонсоры среди частных лиц
Javier Eguiluz
@javiereguiluz
Tugdual Saunier
@tucksaun
Alexandre Salomé
https://alexandre.salome.fr
Timo Bakx
@TimoBakx
Arkadius Stefanski https://ar.kadi.us
Oskar Stark
@OskarStark slaubi
Jérémy Romey
@jeremyFreeAgent
Nicolas Scolari
Guys & Gals at
SymfonyCasts https://symfonycasts.com
Roberto santana
@robertosanval
Ismael Ambrosi
@iambrosi
Mathias STRASSER
https://roukmoute.github.io/
Platform.sh team http://www.platform.sh ongoing https://www.ongoing.ch
Magnus Nordlander
@magnusnordlander
Nicolas Séverin
@nico-incubiq
Centarro https://www.centarro.io
Lior Chamla https://learn.web-develop.me
Art Hundiak
@ahundiak
Manuel de Ruiter https://www.optiwise.nl/
Vincent Huck
Jérôme Nadaud https://nadaud.io
Michael Piecko
@mpiecko
Tobias Schilling https://tschilling.dev
ACSEO
https://www.acseo.fr
Omines Internetbureau https://www.omines.nl/
Seamus Byrne http://seamusbyrne.com
Pavel Dubinin
@geekdevs
Jean-Jacques PERUZZI
https://linkedin.com/in/jjperuzzi
Alexandre Jardin
@ajardin xxi
Christian Ducrot http://ducrot.de
Alexandre HUON
@Aleksanthaar
François Pluchino
@francoispluchino
We Are Builders https://we.are.builders
Rector
@rectorphp
Ilyas Salikhov
@salikhov
Romaric Drigon
@romaricdrigon
Lukáš Moravec
@morki
Malik Meyer-Heder
@mehlichmeyer
Amrouche Hamza
@cDaed
Russell Flynn https://custard.no
Shrihari Pandit
@shriharipandit
Salma NK.
@os_rescue
Nicolas Grekas
Roman Ihoshyn https://ihoshyn.com
Radu Topala https://www.trisoft.ro
Andrey Reinwald https://www.facebook.com/andreinwald
JoliCode
@JoliCode
Rokas Mikalkėnas
Zeljko Mitic
@strictify
Wojciech Kania
@wkania
Andrea Cristaudo https://andrea.cristaudo.eu/
Adrien BRAULTLESAGE
@AdrienBrault
Cristoforo Stevio
Cervino http://www.steviostudio.it
Michele Sangalli
Florian Reiner http://florianreiner.com
Ion Bazan
@IonBazan
Marisa Clardy
@MarisaCodes
Donatas Lomsargis http://donatas.dev
Johnny Lattouf
@johnnylattouf
Duilio Palacios https://styde.net
Pierre Grimaud
@pgrimaud xxii
Marcos Labad Díaz
@esmiz
Stephan Huber https://www.factorial.io
Loïc Vernet https://www.strangebuzz.com
Daniel Knoch http://www.cariba.de
Emagma http://www.emagma.fr
Gilles Doge
Malte Wunsch
@MalteWunsch
Jose Maria Valera
Reales
@Chemaclass
Cleverway https://cleverway.eu/
Nathan
@nutama
Abdellah EL
GHAILANI
https://connect.symfony.com/profile/
aelghailani
Solucionex https://www.solucionex.com
Elnéris Dang https://linkedin.com/in/elneris-dang/
Class Central https://www.classcentral.com/
Ike Borup https://idaho.dev/
Christoph Lühr https://www.christoph-luehr.com/
Zig Websoftware http://www.zig.nl
Dénes Fakan
@DenesFakan
Danny van Kooten http://dvk.co
Denis Azarov http://azarov.de
Martin Poirier T.
https://linkedin.com/in/mpoiriert/
Dmytro Feshchenko
@dmytrof
Carl Casbolt https://www.platinumtechsolutions.co.uk/
Irontec https://www.irontec.com
Lukas Plümper https://lukaspluemper.de/
Neil Nand https://neilnand.co.uk
Andreas Möller https://localheinz.com
Alexey Buldyk https://buldyk.pw
Page Carbajal https://pagecarbajal.com
Florian Voit https://rootsh3ll.de
Webmozarts GmbH
https://webmozarts.com
Alexander M. Turek
@derrabus xxiii
Zan Baldwin
@ZanBaldwin
Ben Marks, Magento http://bhmarks.com xxiv
Любовь семьи
Поддержка семьи — превыше всего. Большое спасибо моей жене
  1   2   3   4   5   6   7   8   9   ...   15

перейти в каталог файлов


связь с админом