Symfony 3

Д
Дмитрий Золотовведущий инженер em РГПУ им. Герцена
Symfony 3
Компонентная разработка в модели MVC на PHP7
Дмитрий Золотов,
ведущий инженер,
dzolotov@herzen.spb.ru
Управление информатизации РГПУ им. А.И.Герцена
Санкт-Петербург, 2015
Нужен ли вам фреймворк?
В вашем приложении?
есть формы с необходимостью проверки корректности заполнения
есть разделение содержимого (или доступности) страниц по ролям
пользователей
существуют шаблонные страницы с заполнением из БД
сложная бизнес-логика и работа с данными
С чего всё началось?
Как и многие другие проекты - с лени.
Обобщение опыта решения типовых задач веб-разработки.
Проекту в этом году - 10 лет
С чего всё началось?
Существует много типовых задач, которые реализуются в большинстве
приложений (шаблонизация, проверка доступа, работа с данными и др.,
создание и проверка форм, кэширование)
Сложные PHP-приложения требуют подключения дополнительных
библиотек
Нужен был способ упаковки компонентов и их связывания (Dependency
Injection)
Symfony - это синтез проектов
Composer - управление зависимостями и автозагрузкой
Doctrine - объектно-реляционное отображение для БД
Twig - гибкая библиотека быстрого построения шаблонов
Monolog - библиотека для записи журналов
Swift Mailer - обработка электронной почты
...
Что такое Symfony?
Если коротко:
контейнер сервисов (подключает, регистрирует и связывание сервисы
из bundle - внешних или из приложения)
маршрутизатор запросов (вызывает контроллер для указанной маски
адреса)
аутентификатор (проверка доступа пользователя к ресурсу)
множество полезных библиотек (например, для разбора YAML)
Проекты, которые используют Symfony
Другие фреймворки: Drupal, Laravel, Silex
Платформы: phpbb, EZ CMS, Joomla, Composer, Magento
Интеграция: Wordpress
Symfony - недостатки?
считается массивным (но версия 3.0 может работать как
микрофреймворк)
нет встроенного MVC Pull (возможности отложенного извлечения
данных видом из контроллера)
использование устаревшей версии PHP (с версии 3.0 - уже не так,
требование - PHP 5.5)
сложность разработки - сейчас уже нет, аннотации упрощают создание
конфигурации
Какие ещё есть фреймворки?
скорость и лёгкость - Kohana (CodeIgniter)
лёгкое связывание с данными - CakePHP
библиотека визуальных компонентов - Yii
MVC Pull - Prado
минимализм - Fat-Free Framework
Что определяет Symfony?
Структуру каталогов:
/app - ядро приложения, yaml-конфигурации (для framework в целом и
компонентов в частности), глобальные ресурсы
/bin - инструменты для проверки проекта, загрузки зависимостей, построение
каркасов Doctrine, …
/src, /tests - в соответствии с PSR-4 исходные тексты и тесты для Bundle
/var - все изменяемые данные (кэши, логи, сессии, …)
Изменения в Symfony 3!
Каталоги /app/cache, /app/logs перемещены в /var/cache, /var/logs (что
логично)
phpunit.xml теперь в корневом каталоге (а не в app, как было раньше)
Запуск консольных команд из /app/console -> /bin/console
Новое в Symfony 2.8/3.0
микрофреймворк (use MicroKernelTrait) - определяет registerBundles,
configureRoutes, configureContainer)
улучшение в поддержке консоли (ProgressIndicator, стили столбцов
таблицы)
поддержка LDAP в сервисе аутентификации
autowiring служб (не нужно явно указывать зависимость!)
новый интерфейс для аутентификации-авторизации
Новое в Symfony 2.8/3.0
PropertyInfo - анализ метаданных классов, сущностей, …
Новый тип RangeType для форм
Возможность пометки deprecated-сервисов
Улучшенный дизайн для web profiler
Полная совместимость с PHP7
Что такое Bundle?
Самостоятельное приложение, состоящее из:
контроллеров (Controller)
тестов (Tests)
ресурсов (Resources): виды (шаблоны), переводы (translations),
конфигурации (config), документация (doc), статические ресурсы
(public)
Bundle - продолжение
Также могут быть:
зарегистрированные консольные команд (Command)
модели данных (Model)
обработчики событий (EventListener)
...
Компоненты Symfony
Filesystem - доступ к файлам и файловой системе
Polyfill - поддержка новых функций на устаревших версиях PHP
Asset - создание URL для статических ресурсов
DomCrawler - просмотр дерева HTML DOM
CssSelector - преобразование CSS Selector -> XPath
Конфигурация приложения
/app/config/config.yml:
parameters / locale - язык
framework / secret - “соль” для токенов и cookies
framework / router - настройки маршрутизации
framework / templating - настройки шаблонизации (движок, версии
assets)
Дополнительные настройки
monolog - правила для протоколирования (уровень, расположение),
компонент: logger
twig - настройки шаблонизации (режим отладки), компонент: templating
app - правила маршрутизации, можно использовать аннотации в
исходных текстах (type=annotation, resource =
“@AppBundle/Controller”), компонент: router
security - настройки безопасности
Маршрутизация
Аннотация в контроллере:
@Route(“path”[, name=”...”)
Путь может включать переменные {...} - параметры метода
Например,
@Route(”/hello/{name}”)
public function hello($name) { return $this-
>render(”default/index.html.twig”)}
Можно указывать requirements - регулярные выражения
Безопасность
providers - поставщики информации об учетных записях (можно
использовать in_memory, логины-пароли и роли в файле конфигурации)
encoders - правила кодирования пароля (например,
SymfonyComponentSecurityCoreUserUser: plaintext)
firewalls - правила безопасности (pattern и security), страницы выхода
(logout)
access_control - путь и требуемые роли
role_hierarchy - отношения наследования ролей
Логика
Определяется набором именованных связанных служб (services.yaml)
Создание экземпляра - средствами контейнера $this->get(“name”) или
неявно при autowiring.
Формы
$obj = new Data();
$form = $this->createFormBuilder($obj)->add(”fieldname”,...)->...-
>getForm();
$form->createView() - создаёт html-представление
$form->handleRequest($request);
if ($form->isValid()) { … $this->redirectToRoute(‘name’); }
Работа с данными
Model/Entity (например, в Doctrine), namespace: AppBundleEntity
Автоматическое создание bean (по описанию класса с @ORMEntity):
bin/console doctrine:generate:entities AppBundle
Поиск:
$repository = $this->getDoctrine()-
>getRepository(”AppBundle:Users”);
$user = $repository->find($id);
$users = $repository->findAll();
$users = $repository->findByOU(”Управление информатизации”)
Варианты компоновки приложения
REST-сервис: Model + Controller (маршрутизация REST-правил и HTTP-методов)
Web-приложение: страницы в шаблонах, Controller + Forms (+security) для
описания действий на интерфейсе, Model для извлечения и обновления данных.
Желательно также создавать сервисы и переносить в них бизнес-логику.
Консольное приложение: class … extends Command, регистрация
configure, execute (getArgument, getOption), ProgressIndicator
Немножко практики
...
ВАШИ ВОПРОСЫ?
Спасибо за внимание!
Приходите к нам и приглашайте друзей.
Сообщество “ИТ. Герценовский университет”: http://goo.gl/FEieqK
Дмитрий Золотов
dzolotov@herzen.spb.ru
1 de 27

Recomendados

Zend framework 2 por
Zend framework 2Zend framework 2
Zend framework 2Alex Simanovich
595 visualizações47 slides
PHP 5.4: Что нового? por
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
1.1K visualizações16 slides
системы сборок проектов por
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
303 visualizações12 slides
Применяем Ansible por
Применяем AnsibleПрименяем Ansible
Применяем AnsibleAlexander Svetkin
591 visualizações21 slides
Thumbtack Expertise Days # 5 - Ansible por
Thumbtack Expertise Days # 5 - AnsibleThumbtack Expertise Days # 5 - Ansible
Thumbtack Expertise Days # 5 - AnsibleAlexey Remnev
453 visualizações32 slides
Первые шаги с RabbitMQ por
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQAlexander Svetkin
693 visualizações14 slides

Mais conteúdo relacionado

Mais procurados

Курс Java-2016. Занятие 06. Файлы и ввод-вывод por
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод7bits
505 visualizações22 slides
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs)) por
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
270 visualizações25 slides
Android - 11 - Multithreading por
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - MultithreadingNoveo
849 visualizações20 slides
Web осень 2013 лекция 3 por
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
1.1K visualizações36 slides
Продвинутое использование Celery — Александр Кошелев por
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевYandex
2.1K visualizações30 slides
Многопоточность, работа с сетью (Lecture 12 – multithreading, network) por
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
561 visualizações28 slides

Mais procurados(20)

Курс Java-2016. Занятие 06. Файлы и ввод-вывод por 7bits
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
7bits505 visualizações
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs)) por Noveo
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Noveo270 visualizações
Android - 11 - Multithreading por Noveo
Android - 11 - MultithreadingAndroid - 11 - Multithreading
Android - 11 - Multithreading
Noveo849 visualizações
Web осень 2013 лекция 3 por Technopark
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
Technopark1.1K visualizações
Продвинутое использование Celery — Александр Кошелев por Yandex
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр Кошелев
Yandex2.1K visualizações
Многопоточность, работа с сетью (Lecture 12 – multithreading, network) por Noveo
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Noveo561 visualizações
МАИ, Сети ЭВМ, Лекция №5 por Dima Dzuba
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
Dima Dzuba386 visualizações
Инфраструктура распределенных приложений на Node.js por Stanislav Gumeniuk
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
Stanislav Gumeniuk421 visualizações
C++ Базовый. Занятие 13. por Igor Shkulipa
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.
Igor Shkulipa437 visualizações
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования... por rit2011
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
rit2011346 visualizações
Почему Mojolicious? por Anatoly Sharifulin
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin1.7K visualizações
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013 por Moscow.pm
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Moscow.pm1.4K visualizações
Компиляция скриптов PHP. Алексей Романенко por Fuenteovejuna
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
Fuenteovejuna 2.3K visualizações
Архитектура. Доступноять программных систем. por Dima Dzuba
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
Dima Dzuba463 visualizações
курс Java 2016. занятие 03. интерфейсы, generic, исключения por 7bits
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
7bits548 visualizações
Анатомия веб-сервиса (РИТ-2014) por Andrey Smirnov
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
Andrey Smirnov2.8K visualizações
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов por Fuenteovejuna
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Fuenteovejuna 524 visualizações
МАИ, Сети ЭВМ, Лекция №4 por Dima Dzuba
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4
Dima Dzuba479 visualizações
Easy selenium test automation on python por Mykhailo Poliarush
Easy selenium test automation on pythonEasy selenium test automation on python
Easy selenium test automation on python
Mykhailo Poliarush23.8K visualizações

Similar a Symfony 3

Catalyst – MVC framework на Perl (RIT 2008) por
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
1.3K visualizações19 slides
Лекция #6. Введение в Django web-framework por
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЯковенко Кирилл
5.8K visualizações24 slides
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK por
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
374 visualizações37 slides
Backbone lesson 1 por
Backbone lesson 1Backbone lesson 1
Backbone lesson 1Mihail Skida
1.4K visualizações13 slides
[JAM 1.1] Symfony (Alexei Yanochkin) por
[JAM 1.1] Symfony (Alexei Yanochkin)[JAM 1.1] Symfony (Alexei Yanochkin)
[JAM 1.1] Symfony (Alexei Yanochkin)Evgeny Kaziak
463 visualizações13 slides
Meet Magento Belarus 2015: Denis Bosak por
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakAmasty
1K visualizações33 slides

Similar a Symfony 3(20)

Catalyst – MVC framework на Perl (RIT 2008) por Sergey Skvortsov
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
Sergey Skvortsov1.3K visualizações
Лекция #6. Введение в Django web-framework por Яковенко Кирилл
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
Яковенко Кирилл5.8K visualizações
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK por Cisco Russia
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia 374 visualizações
Backbone lesson 1 por Mihail Skida
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
Mihail Skida1.4K visualizações
[JAM 1.1] Symfony (Alexei Yanochkin) por Evgeny Kaziak
[JAM 1.1] Symfony (Alexei Yanochkin)[JAM 1.1] Symfony (Alexei Yanochkin)
[JAM 1.1] Symfony (Alexei Yanochkin)
Evgeny Kaziak463 visualizações
Meet Magento Belarus 2015: Denis Bosak por Amasty
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
Amasty1K visualizações
Устройство фреймворка symfony 2 (http://frontend-dev.ru) por Александр Егурцов
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Александр Егурцов3.4K visualizações
Symfony2 Best Practices por Mikhail Prosalov
Symfony2 Best PracticesSymfony2 Best Practices
Symfony2 Best Practices
Mikhail Prosalov412 visualizações
метод организации репозитория исходного кода por Sergii Shmarkatiuk
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
Sergii Shmarkatiuk1.7K visualizações
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий por JSC “Arcadia Inc”
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
JSC “Arcadia Inc”2.7K visualizações
Meeting #4. Frameworks. por Igor Khrol
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
Igor Khrol546 visualizações
Стандарты и соглашения в сложных ООП-приложениях por Magecom Ukraine
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
Magecom Ukraine539 visualizações
FFCMS - вводная для пользователя por zenn1989
FFCMS - вводная для пользователяFFCMS - вводная для пользователя
FFCMS - вводная для пользователя
zenn198924.6K visualizações
Экскурс в мир WEB разработки por IT-Доминанта
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
IT-Доминанта1.7K visualizações
Soa12c launch 4 mft cr por Vasily Demin
Soa12c launch 4 mft crSoa12c launch 4 mft cr
Soa12c launch 4 mft cr
Vasily Demin528 visualizações
компоненты E learn для Plone por Sergey Greger
компоненты E learn для Ploneкомпоненты E learn для Plone
компоненты E learn для Plone
Sergey Greger443 visualizações
Современные платформы (фреймворки) разработки веб- приложений на PHP por Magecom Ukraine
Современные платформы (фреймворки) разработки веб- приложений на PHP Современные платформы (фреймворки) разработки веб- приложений на PHP
Современные платформы (фреймворки) разработки веб- приложений на PHP
Magecom Ukraine1.6K visualizações
ASP.NET, MVC, ASP.NET MVC por GetDev.NET
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET2.6K visualizações
Как пройти собеседование и получить первую работу на Swift por Anton Loginov
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
Anton Loginov2.1K visualizações
C# Desktop. Занятие 01. por Igor Shkulipa
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
Igor Shkulipa307 visualizações

Symfony 3

  • 1. Symfony 3 Компонентная разработка в модели MVC на PHP7 Дмитрий Золотов, ведущий инженер, dzolotov@herzen.spb.ru Управление информатизации РГПУ им. А.И.Герцена Санкт-Петербург, 2015
  • 2. Нужен ли вам фреймворк? В вашем приложении? есть формы с необходимостью проверки корректности заполнения есть разделение содержимого (или доступности) страниц по ролям пользователей существуют шаблонные страницы с заполнением из БД сложная бизнес-логика и работа с данными
  • 3. С чего всё началось? Как и многие другие проекты - с лени. Обобщение опыта решения типовых задач веб-разработки. Проекту в этом году - 10 лет
  • 4. С чего всё началось? Существует много типовых задач, которые реализуются в большинстве приложений (шаблонизация, проверка доступа, работа с данными и др., создание и проверка форм, кэширование) Сложные PHP-приложения требуют подключения дополнительных библиотек Нужен был способ упаковки компонентов и их связывания (Dependency Injection)
  • 5. Symfony - это синтез проектов Composer - управление зависимостями и автозагрузкой Doctrine - объектно-реляционное отображение для БД Twig - гибкая библиотека быстрого построения шаблонов Monolog - библиотека для записи журналов Swift Mailer - обработка электронной почты ...
  • 6. Что такое Symfony? Если коротко: контейнер сервисов (подключает, регистрирует и связывание сервисы из bundle - внешних или из приложения) маршрутизатор запросов (вызывает контроллер для указанной маски адреса) аутентификатор (проверка доступа пользователя к ресурсу) множество полезных библиотек (например, для разбора YAML)
  • 7. Проекты, которые используют Symfony Другие фреймворки: Drupal, Laravel, Silex Платформы: phpbb, EZ CMS, Joomla, Composer, Magento Интеграция: Wordpress
  • 8. Symfony - недостатки? считается массивным (но версия 3.0 может работать как микрофреймворк) нет встроенного MVC Pull (возможности отложенного извлечения данных видом из контроллера) использование устаревшей версии PHP (с версии 3.0 - уже не так, требование - PHP 5.5) сложность разработки - сейчас уже нет, аннотации упрощают создание конфигурации
  • 9. Какие ещё есть фреймворки? скорость и лёгкость - Kohana (CodeIgniter) лёгкое связывание с данными - CakePHP библиотека визуальных компонентов - Yii MVC Pull - Prado минимализм - Fat-Free Framework
  • 10. Что определяет Symfony? Структуру каталогов: /app - ядро приложения, yaml-конфигурации (для framework в целом и компонентов в частности), глобальные ресурсы /bin - инструменты для проверки проекта, загрузки зависимостей, построение каркасов Doctrine, … /src, /tests - в соответствии с PSR-4 исходные тексты и тесты для Bundle /var - все изменяемые данные (кэши, логи, сессии, …)
  • 11. Изменения в Symfony 3! Каталоги /app/cache, /app/logs перемещены в /var/cache, /var/logs (что логично) phpunit.xml теперь в корневом каталоге (а не в app, как было раньше) Запуск консольных команд из /app/console -> /bin/console
  • 12. Новое в Symfony 2.8/3.0 микрофреймворк (use MicroKernelTrait) - определяет registerBundles, configureRoutes, configureContainer) улучшение в поддержке консоли (ProgressIndicator, стили столбцов таблицы) поддержка LDAP в сервисе аутентификации autowiring служб (не нужно явно указывать зависимость!) новый интерфейс для аутентификации-авторизации
  • 13. Новое в Symfony 2.8/3.0 PropertyInfo - анализ метаданных классов, сущностей, … Новый тип RangeType для форм Возможность пометки deprecated-сервисов Улучшенный дизайн для web profiler Полная совместимость с PHP7
  • 14. Что такое Bundle? Самостоятельное приложение, состоящее из: контроллеров (Controller) тестов (Tests) ресурсов (Resources): виды (шаблоны), переводы (translations), конфигурации (config), документация (doc), статические ресурсы (public)
  • 15. Bundle - продолжение Также могут быть: зарегистрированные консольные команд (Command) модели данных (Model) обработчики событий (EventListener) ...
  • 16. Компоненты Symfony Filesystem - доступ к файлам и файловой системе Polyfill - поддержка новых функций на устаревших версиях PHP Asset - создание URL для статических ресурсов DomCrawler - просмотр дерева HTML DOM CssSelector - преобразование CSS Selector -> XPath
  • 17. Конфигурация приложения /app/config/config.yml: parameters / locale - язык framework / secret - “соль” для токенов и cookies framework / router - настройки маршрутизации framework / templating - настройки шаблонизации (движок, версии assets)
  • 18. Дополнительные настройки monolog - правила для протоколирования (уровень, расположение), компонент: logger twig - настройки шаблонизации (режим отладки), компонент: templating app - правила маршрутизации, можно использовать аннотации в исходных текстах (type=annotation, resource = “@AppBundle/Controller”), компонент: router security - настройки безопасности
  • 19. Маршрутизация Аннотация в контроллере: @Route(“path”[, name=”...”) Путь может включать переменные {...} - параметры метода Например, @Route(”/hello/{name}”) public function hello($name) { return $this- >render(”default/index.html.twig”)} Можно указывать requirements - регулярные выражения
  • 20. Безопасность providers - поставщики информации об учетных записях (можно использовать in_memory, логины-пароли и роли в файле конфигурации) encoders - правила кодирования пароля (например, SymfonyComponentSecurityCoreUserUser: plaintext) firewalls - правила безопасности (pattern и security), страницы выхода (logout) access_control - путь и требуемые роли role_hierarchy - отношения наследования ролей
  • 21. Логика Определяется набором именованных связанных служб (services.yaml) Создание экземпляра - средствами контейнера $this->get(“name”) или неявно при autowiring.
  • 22. Формы $obj = new Data(); $form = $this->createFormBuilder($obj)->add(”fieldname”,...)->...- >getForm(); $form->createView() - создаёт html-представление $form->handleRequest($request); if ($form->isValid()) { … $this->redirectToRoute(‘name’); }
  • 23. Работа с данными Model/Entity (например, в Doctrine), namespace: AppBundleEntity Автоматическое создание bean (по описанию класса с @ORMEntity): bin/console doctrine:generate:entities AppBundle Поиск: $repository = $this->getDoctrine()- >getRepository(”AppBundle:Users”); $user = $repository->find($id); $users = $repository->findAll(); $users = $repository->findByOU(”Управление информатизации”)
  • 24. Варианты компоновки приложения REST-сервис: Model + Controller (маршрутизация REST-правил и HTTP-методов) Web-приложение: страницы в шаблонах, Controller + Forms (+security) для описания действий на интерфейсе, Model для извлечения и обновления данных. Желательно также создавать сервисы и переносить в них бизнес-логику. Консольное приложение: class … extends Command, регистрация configure, execute (getArgument, getOption), ProgressIndicator
  • 27. Спасибо за внимание! Приходите к нам и приглашайте друзей. Сообщество “ИТ. Герценовский университет”: http://goo.gl/FEieqK Дмитрий Золотов dzolotov@herzen.spb.ru