SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
Alex Kornienko [email_address] Symfony   2  на практике Разработка реального проекта
Symfony 2 –  какой он есть сейчас? ,[object Object],[object Object],[object Object],[object Object]
Структура директорий проекта
Структура компонентов фреймворка
Бандлы приложения - независимы
Какая будет структура приложения? 1)  Будут два бандла:  TickerBundle –  ядро тикет-системы и  GuardBundle –  контроль доступа (авторизация) 2)  Независимые бандлы будут взаимодействовать через механизм сервисов и внедрение зависимостей ( Dependency Injection ) .  Доступ к внешним классам получаем, например, через контейнер:   $user=$this->container->getService('model.user')->getById( …) 3)  В остальном – обычный  MVC.  Только для каждого бандла все свое: роутинг, конфиги, модели, контроллеры, виды
Symfony 2: 3  кита
Связывание бандлов при помощи  DI  контейнера. Проектирование служб. 1)  Информация обо всех зависимостях, подключенных бандлах и сервисах хранится в контейнере. 2)  Контейнер внедрения зависимостей создается на этапе создания ядра приложения (следующий слайд). 3)  Пример создания сервиса: <service id=&quot;controller_manager&quot; class=&quot;%controller_manager.class%&quot;> <argument type=&quot;service&quot; id=&quot;service_container&quot; /> <argument type=&quot;service&quot; id=&quot;logger&quot; on-invalid=&quot;ignore&quot; /> </service> 4)  Для каждого бандла предусмотрен механизм расширения контейнера внедрения зависимостей. То есть добавления и «перетирания» существующих сервисов (механизм  extensions ).
Запуск ядра ( kernel )   приложения public function boot() { if (true === $this->booted) {throw new ogicException('The kernel is already booted.');} require_once __DIR__.'/bootstrap.php'; $this->bundles = $this->registerBundles(); $this->bundleDirs = $this->registerBundleDirs(); // initialize the container $this->container = $this->initializeContainer();   //  сразу же создаем  DI  контейнер $this->container->setService('kernel', $this); // boot bundles foreach ($this->bundles as $bundle) { $bundle->boot( $this->container );   //  основное внедрение зависимостей } $this->booted = true; return $this; }
Работа с  Doctrine 2 1) Подключение  Doctrine 2  просто в  config.yml .  2) Создание таблиц по их описанию и начальная инициализация производится автоматически с консоли. 3) Операции  CRUD  объявлены в службе  doctrine.orm.entity_manager 4) Очень простой доступ с контроллера (через контейнер): $em = $this->container->getService('doctrine.orm.entity_manager'); 5)  Но понятно, что логика по работе с БД должна быть во внешних классах (сервисах). На след слайде создадим их.
Создание и подключение моделей 1) Создадим внешний класс с методами по управлению юзерами, тикетами, .. например: <service id=&quot;model.user&quot; class=&quot;ApplicationickerBundleodelserModel&quot;> <argument type=&quot;service&quot; id=&quot;doctrine.orm.entity_manager&quot; /> </service> 2)  Создадим соответствующий класс (следущий слайд). 3) В контроллере вызовем метод из соответствующей модели: if ($this->getRequest()->getMethod() == 'POST') { $id =  $this->getRequest()->request->get('id') ; $user = $this->container->getService('model.user')->deleteById( $id ); }
Класс модели namespace ApplicationickerBundleodel; use DoctrineRMntityManager; use ApplicationickerBundlentitiesser; class UserModel { protected $em; //EntityManager instance public function __construct( EntityManager $em ){ $this->em = $em; } public function deleteById($id) {  $query = $this->em-> createQuery(&quot;SELECT u FROM TickerBundle:User u WHERE u.id = $id&quot;); $user = $query->getResult(); $this->em->remove($user[0]); $this->em->flush(); } }
Что дальше? ,[object Object],[object Object],[object Object],[object Object]

Mais conteúdo relacionado

Destaque (20)

DuVita's CRUISE to SUCCESS- Presenters & Presentations
DuVita's CRUISE to SUCCESS- Presenters & PresentationsDuVita's CRUISE to SUCCESS- Presenters & Presentations
DuVita's CRUISE to SUCCESS- Presenters & Presentations
 
Export New York
Export New YorkExport New York
Export New York
 
Learning studio
Learning studioLearning studio
Learning studio
 
Office2007
Office2007Office2007
Office2007
 
Cny70
Cny70Cny70
Cny70
 
Social media in schools
Social media in schoolsSocial media in schools
Social media in schools
 
W杯2010のこれまで
W杯2010のこれまでW杯2010のこれまで
W杯2010のこれまで
 
Presentation for ORCID webinar for the Portuguese BAD series (11 Dec 2012)
Presentation for ORCID webinar for the Portuguese BAD series (11 Dec 2012)Presentation for ORCID webinar for the Portuguese BAD series (11 Dec 2012)
Presentation for ORCID webinar for the Portuguese BAD series (11 Dec 2012)
 
Pulmonaryembolism
PulmonaryembolismPulmonaryembolism
Pulmonaryembolism
 
Hiring UX/UI designers
Hiring UX/UI designersHiring UX/UI designers
Hiring UX/UI designers
 
Social Media Extravaganza for Nonprofits
Social Media Extravaganza for NonprofitsSocial Media Extravaganza for Nonprofits
Social Media Extravaganza for Nonprofits
 
La sagesse du web
La sagesse du web La sagesse du web
La sagesse du web
 
Work with PFB Worldwide
Work with PFB Worldwide Work with PFB Worldwide
Work with PFB Worldwide
 
CRISs, IRs and their interoperability: an updated picture [with some focus on...
CRISs, IRs and their interoperability: an updated picture [with some focus on...CRISs, IRs and their interoperability: an updated picture [with some focus on...
CRISs, IRs and their interoperability: an updated picture [with some focus on...
 
Spreety v seo report
Spreety v seo reportSpreety v seo report
Spreety v seo report
 
网页制作基础
网页制作基础网页制作基础
网页制作基础
 
Aiborgj0
Aiborgj0Aiborgj0
Aiborgj0
 
De castro sonex work group
De castro sonex work groupDe castro sonex work group
De castro sonex work group
 
Karl lacson
Karl lacsonKarl lacson
Karl lacson
 
网页制作基础
网页制作基础网页制作基础
网页制作基础
 

Semelhante a Symfony2 practice

Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)Dmitry Evteev
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Sergiy Shychynov
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianSergiy Shychynov
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Mail.ru Group
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Fedor Malyshkin
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVCmandrew182
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryMax Rozdobudko
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...MDDay_4
 
Rocket Jump: Project integration into few social networks is not a headache
Rocket Jump: Project integration into few social networks is not a headacheRocket Jump: Project integration into few social networks is not a headache
Rocket Jump: Project integration into few social networks is not a headacheDevGAMM Conference
 
Programming Guide
Programming GuideProgramming Guide
Programming Guideguest63e09c
 
Стек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPСтек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPIntersog
 
IoT Protocols #iotconfua
IoT Protocols #iotconfuaIoT Protocols #iotconfua
IoT Protocols #iotconfuaAndy Shutka
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
FFCMS - вводная для пользователя
FFCMS - вводная для пользователяFFCMS - вводная для пользователя
FFCMS - вводная для пользователяzenn1989
 
презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014
презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014
презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014Artsofte IT company
 

Semelhante a Symfony2 practice (20)

Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
 
UAFPUG6 - PureMVC
UAFPUG6 - PureMVCUAFPUG6 - PureMVC
UAFPUG6 - PureMVC
 
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha DmitryUafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
Uafpug 8 Presentation Puremvc Papervision Gallery Kuriksha Dmitry
 
PureMVC and Papervision
PureMVC and PapervisionPureMVC and Papervision
PureMVC and Papervision
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...
 
Rocket Jump: Project integration into few social networks is not a headache
Rocket Jump: Project integration into few social networks is not a headacheRocket Jump: Project integration into few social networks is not a headache
Rocket Jump: Project integration into few social networks is not a headache
 
Programming Guide
Programming GuideProgramming Guide
Programming Guide
 
Стек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPСтек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMP
 
IoT Protocols #iotconfua
IoT Protocols #iotconfuaIoT Protocols #iotconfua
IoT Protocols #iotconfua
 
IoT Conf UA 2016
IoT Conf UA 2016IoT Conf UA 2016
IoT Conf UA 2016
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
FFCMS - вводная для пользователя
FFCMS - вводная для пользователяFFCMS - вводная для пользователя
FFCMS - вводная для пользователя
 
презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014
презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014
презентация Адеев Николай, Artsofte для Tеlecom&Clouds 2014
 

Symfony2 practice

  • 1. Alex Kornienko [email_address] Symfony 2 на практике Разработка реального проекта
  • 2.
  • 5. Бандлы приложения - независимы
  • 6. Какая будет структура приложения? 1) Будут два бандла: TickerBundle – ядро тикет-системы и GuardBundle – контроль доступа (авторизация) 2) Независимые бандлы будут взаимодействовать через механизм сервисов и внедрение зависимостей ( Dependency Injection ) . Доступ к внешним классам получаем, например, через контейнер: $user=$this->container->getService('model.user')->getById( …) 3) В остальном – обычный MVC. Только для каждого бандла все свое: роутинг, конфиги, модели, контроллеры, виды
  • 7. Symfony 2: 3 кита
  • 8. Связывание бандлов при помощи DI контейнера. Проектирование служб. 1) Информация обо всех зависимостях, подключенных бандлах и сервисах хранится в контейнере. 2) Контейнер внедрения зависимостей создается на этапе создания ядра приложения (следующий слайд). 3) Пример создания сервиса: <service id=&quot;controller_manager&quot; class=&quot;%controller_manager.class%&quot;> <argument type=&quot;service&quot; id=&quot;service_container&quot; /> <argument type=&quot;service&quot; id=&quot;logger&quot; on-invalid=&quot;ignore&quot; /> </service> 4) Для каждого бандла предусмотрен механизм расширения контейнера внедрения зависимостей. То есть добавления и «перетирания» существующих сервисов (механизм extensions ).
  • 9. Запуск ядра ( kernel ) приложения public function boot() { if (true === $this->booted) {throw new ogicException('The kernel is already booted.');} require_once __DIR__.'/bootstrap.php'; $this->bundles = $this->registerBundles(); $this->bundleDirs = $this->registerBundleDirs(); // initialize the container $this->container = $this->initializeContainer(); // сразу же создаем DI контейнер $this->container->setService('kernel', $this); // boot bundles foreach ($this->bundles as $bundle) { $bundle->boot( $this->container ); // основное внедрение зависимостей } $this->booted = true; return $this; }
  • 10. Работа с Doctrine 2 1) Подключение Doctrine 2 просто в config.yml . 2) Создание таблиц по их описанию и начальная инициализация производится автоматически с консоли. 3) Операции CRUD объявлены в службе doctrine.orm.entity_manager 4) Очень простой доступ с контроллера (через контейнер): $em = $this->container->getService('doctrine.orm.entity_manager'); 5) Но понятно, что логика по работе с БД должна быть во внешних классах (сервисах). На след слайде создадим их.
  • 11. Создание и подключение моделей 1) Создадим внешний класс с методами по управлению юзерами, тикетами, .. например: <service id=&quot;model.user&quot; class=&quot;ApplicationickerBundleodelserModel&quot;> <argument type=&quot;service&quot; id=&quot;doctrine.orm.entity_manager&quot; /> </service> 2) Создадим соответствующий класс (следущий слайд). 3) В контроллере вызовем метод из соответствующей модели: if ($this->getRequest()->getMethod() == 'POST') { $id = $this->getRequest()->request->get('id') ; $user = $this->container->getService('model.user')->deleteById( $id ); }
  • 12. Класс модели namespace ApplicationickerBundleodel; use DoctrineRMntityManager; use ApplicationickerBundlentitiesser; class UserModel { protected $em; //EntityManager instance public function __construct( EntityManager $em ){ $this->em = $em; } public function deleteById($id) { $query = $this->em-> createQuery(&quot;SELECT u FROM TickerBundle:User u WHERE u.id = $id&quot;); $user = $query->getResult(); $this->em->remove($user[0]); $this->em->flush(); } }
  • 13.