SlideShare a Scribd company logo
1 of 15
Download to read offline
Symfony2
Александр Егурцов
Symfony2
 Не просто MVC framework. Symfony – это
  гораздо больше.
 Возможность использовать компоненты
  независимо друг от друга
 Частично или полностью используется во
  множестве проектов
 Огромное сообщество
 Философия: не изобретай колесо
 Поддержка фич из PHP 5.3

                                           2
Composer
•   // composer.json

•   {
•        "name": "symfony/framework-standard-edition",
•        "description": "The "Symfony Standard Edition" distribution",
•        "autoload": {
•           "psr-0": { "": "src/" }
•        },
•        "require": {
•           "php": ">=5.3.3",
•           "symfony/symfony": "2.1.*",
•           "doctrine/orm": ">=2.2.3,<2.4-dev",
•           "doctrine/doctrine-bundle": "1.0.*",
•           "twig/extensions": "1.0.*",
•           "symfony/assetic-bundle": "2.1.*",
•           "symfony/swiftmailer-bundle": "2.1.*",
•           "symfony/monolog-bundle": "2.1.*",
•           "sensio/distribution-bundle": "2.1.*",
•           "sensio/framework-extra-bundle": "2.1.*",
•           "sensio/generator-bundle": "2.1.*",
•           "jms/security-extra-bundle": "1.2.*",
•           "jms/di-extra-bundle": "1.1.*",
•   },
•        "scripts": {
•           "post-install-cmd": [
•              "SensioBundleDistributionBundleComposerScriptHandler::buildBootstrap",
•              "SensioBundleDistributionBundleComposerScriptHandler::clearCache",
•              "SensioBundleDistributionBundleComposerScriptHandler::installAssets",
•              "SensioBundleDistributionBundleComposerScriptHandler::installRequirementsFile"
•           ],
•           "post-update-cmd": [
•              "SensioBundleDistributionBundleComposerScriptHandler::buildBootstrap",
•              "SensioBundleDistributionBundleComposerScriptHandler::clearCache",
•              "SensioBundleDistributionBundleComposerScriptHandler::installAssets",
•              "SensioBundleDistributionBundleComposerScriptHandler::installRequirementsFile"
•           ]
•        },
•        "minimum-stability": "dev",
•        "extra": {
•           "symfony-app-dir": "app",
•           "symfony-web-dir": "web"
•        }
•   }




                                                                                                        3
Composer
Возможности:
 Скачивать пакеты и их зависимости
 Не требуется установленной системы
  контроля версий
 Источник: любое место, любая
  структура!
 Поддержание библиотек в актуальном
  состоянии
 Автозагрузка
                                       4
Composer
Установка:


sudo curl -s https://getcomposer.org/installer | php

sudo mv composer.phar /usr/local/bin/composer




                                                   5
Symfony2
Установка:
composer create-project symfony/framework-standard-edition blog.loc/ 2.1.3

 - app/: Директория с настройками
 приложения

 - src/: Код проекта находится тут

 - vendor/: Место для хранения
 сторонних библиотек;

  - web/: Корневая директория веб-
 сервера. Хранилище публичных
 файлов



                                                                             6
Symfony2
Установка:
// etc/nginx/conf.d/blog.loc

server {
 server_name blog.loc;
 root /var/blog.loc/web;

rewrite ^/app.php/?(.*)$ /$1 permanent;

location / {
  index app.php;
  try_files $uri @rewriteapp;
}

location @rewriteapp {
  rewrite ^(.*)$ /app.php/$1 last;
}

 location ~ ^/(app|app_dev|config).php(/|$) {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_split_path_info ^(.+.php)(/.*)$;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_param HTTPS             off;
 }
}




                                                                       7
Symfony2
Bundle:
php app/console generate:bundle --namespace=Blog/BlogBundle --format=yml

•   Controller/ Содержит код контроллеров(например: HelloController.php);

•   DependencyInjection/ Содержит настройки управления зависимостями
    (необязательна);

•   Resources/config/ Настройки бандла (например: routing.yml);

•   Resources/views/ Хранилище шаблонов, организованных по именам
    контроллера (например: Hello/index.html.twig);

•   Resources/public/ Публичные файлы (изображения, стили, и т.д.), копируются
    в корневую директорию проекта web/ directory командой
    assets:install console command;

•   Tests/ Директория с тестами.

                                                                                 8
Symfony2
Controller:




•   Запрос приходит на front controller (app.php)

•   Ядро Symfony2 (Kernel) отправляет запрос в роутер

•   Запрос разбирается роутером (routing.yml). Определяется имя контроллера.

•   Ядро Symfony2 (Kernel) выполняет код контроллера, который обязательно возвращает
    объект ответа (Response)


                                                                                       9
Symfony2
Резюме:
 Для создания страницы требуется выполнить
  три простых шага:
  - создать роут
  - создать контроллер
  - создать шаблон
 Всё в symfony организованно в бандлы
 Настройки можно найти в директори
  Resources/config бандла
 Глобальные настройки находятся в директории
  app/config
                                            10
Symfony2
TWIG:
•   Быстрый
•   Надёжный
•   Краткий
•   Гибкий
•   Лёгкий в освоении
•   Расширяемый
•   Полностью покрыт тестами
•   Хорошо задокументирован
•   Безопасный




                               11
Symfony2
TWIG:
•   Переменные
          {{ foo.bar }}
          {{ foo['bar'] }}

•   Циклы
            {% for user in users %}
                           <li>{{ user.username|e }}</li>
            {% endfor %}

•   Условия
           {% if users|length > 0 %}
                         {{ user.username }}
           {% endif %}

•   Фильтры
          {# очищаем от html тегов #}
          {{ name|striptags }}
            {# переводим всё в верхний регистр #}
            {% filter upper %}
                          This text becomes uppercase
            {% endfilter %}

•   Вложения
            {% include 'sidebar.html' %}

•   Комментарии
          {# комментарии пишут так #}

                                                            12
Symfony2
Doctrine2:
   Создать базу данных
         php app/console doctrine:database:create
   Создать сущность
         php app/console doctrine:generate:entity --entity="BlogBlogBundle:Post"
   Сгенерировать класс
         php app/console doctrine:generate:entities BlogBlogBundle
   Сгенерировать таблицы в базе
         php app/console doctrine:schema:update --force




                                                                                   13
Symfony2
DI:
# app/config/config.yml
services:
  post_repository:
    class:           BlogBlogBundleEntityPostRepository
    factory_service: doctrine.orm.default_entity_manager
    factory_method: getRepository
    arguments:
       - BlogBlogBundle:Post

  searcher:
    class: BlogBlogBundleLibSearcherSearcher
    arguments: [@post_repository]
                                                             14
Контакты
Евгений Кривошеев, ekrivosheyev@scrumtrek.ru
Никита Филиппов, nfilippov@scrumtrek.ru
Асхат Уразбаев, askhat@scrumtrek.ru

Александр Егурцов, egurtsov@gmail.com



                   «Тяжело в учении – легко в бою»

                     SkillTrek – это дистанционный центр компетенций,
                     где специалисты получают востребованные на
                     рынке знания и навыки в условиях реальных
                     проектов с выбором удобной им загрузки



                                                                   15

More Related Content

What's hot

Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0zfconfua
 
Отладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/AjaxОтладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/AjaxAlexander Shurkayev
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...zfconfua
 
Белов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложенияхБелов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложенияхqasib
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servereygoltsev
 
WordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномWordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномVladimir Samoletov
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7Technopark
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюГлеб Тарасов
 
Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.
Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.
Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.Alexander Bezruchenko
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
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
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''DneprCiklumEvents
 
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...Mikhail Egorov
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Andrey Taritsyn
 

What's hot (20)

Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0
 
Отладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/AjaxОтладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/Ajax
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
 
Белов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложенияхБелов наиболее часто уязвимые места в веб приложениях
Белов наиболее часто уязвимые места в веб приложениях
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servere
 
WordPress auto-install: просто о сложном
WordPress auto-install: просто о сложномWordPress auto-install: просто о сложном
WordPress auto-install: просто о сложном
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
 
Ограничение доступа в ruby on rails
Ограничение доступа в ruby on railsОграничение доступа в ruby on rails
Ограничение доступа в ruby on rails
 
Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.
Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.
Tasks (batch) in Symfony. Symfony Camp Presentation 2010 UA.
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
 
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
CSRF-уязвимости все еще актуальны: как атакующие обходят CSRF-защиту в вашем ...
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
 

Similar to Устройство фреймворка symfony 2 (http://frontend-dev.ru)

Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование SymfonyMedia Gorod
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеAlex Tumanoff
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)Alex Demchenko
 
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox ExtensionОранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extensionchaykaborya
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими рукамиStanislavMalkin
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 

Similar to Устройство фреймворка symfony 2 (http://frontend-dev.ru) (20)

Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование Symfony
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Symfony2 Best Practices
Symfony2 Best PracticesSymfony2 Best Practices
Symfony2 Best Practices
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)Symfony as the platform for open source projects (sympal, apostrophe, diem)
Symfony as the platform for open source projects (sympal, apostrophe, diem)
 
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox ExtensionОранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 

Устройство фреймворка symfony 2 (http://frontend-dev.ru)

  • 2. Symfony2  Не просто MVC framework. Symfony – это гораздо больше.  Возможность использовать компоненты независимо друг от друга  Частично или полностью используется во множестве проектов  Огромное сообщество  Философия: не изобретай колесо  Поддержка фич из PHP 5.3 2
  • 3. Composer • // composer.json • { • "name": "symfony/framework-standard-edition", • "description": "The "Symfony Standard Edition" distribution", • "autoload": { • "psr-0": { "": "src/" } • }, • "require": { • "php": ">=5.3.3", • "symfony/symfony": "2.1.*", • "doctrine/orm": ">=2.2.3,<2.4-dev", • "doctrine/doctrine-bundle": "1.0.*", • "twig/extensions": "1.0.*", • "symfony/assetic-bundle": "2.1.*", • "symfony/swiftmailer-bundle": "2.1.*", • "symfony/monolog-bundle": "2.1.*", • "sensio/distribution-bundle": "2.1.*", • "sensio/framework-extra-bundle": "2.1.*", • "sensio/generator-bundle": "2.1.*", • "jms/security-extra-bundle": "1.2.*", • "jms/di-extra-bundle": "1.1.*", • }, • "scripts": { • "post-install-cmd": [ • "SensioBundleDistributionBundleComposerScriptHandler::buildBootstrap", • "SensioBundleDistributionBundleComposerScriptHandler::clearCache", • "SensioBundleDistributionBundleComposerScriptHandler::installAssets", • "SensioBundleDistributionBundleComposerScriptHandler::installRequirementsFile" • ], • "post-update-cmd": [ • "SensioBundleDistributionBundleComposerScriptHandler::buildBootstrap", • "SensioBundleDistributionBundleComposerScriptHandler::clearCache", • "SensioBundleDistributionBundleComposerScriptHandler::installAssets", • "SensioBundleDistributionBundleComposerScriptHandler::installRequirementsFile" • ] • }, • "minimum-stability": "dev", • "extra": { • "symfony-app-dir": "app", • "symfony-web-dir": "web" • } • } 3
  • 4. Composer Возможности:  Скачивать пакеты и их зависимости  Не требуется установленной системы контроля версий  Источник: любое место, любая структура!  Поддержание библиотек в актуальном состоянии  Автозагрузка 4
  • 5. Composer Установка: sudo curl -s https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer 5
  • 6. Symfony2 Установка: composer create-project symfony/framework-standard-edition blog.loc/ 2.1.3 - app/: Директория с настройками приложения - src/: Код проекта находится тут - vendor/: Место для хранения сторонних библиотек; - web/: Корневая директория веб- сервера. Хранилище публичных файлов 6
  • 7. Symfony2 Установка: // etc/nginx/conf.d/blog.loc server { server_name blog.loc; root /var/blog.loc/web; rewrite ^/app.php/?(.*)$ /$1 permanent; location / { index app.php; try_files $uri @rewriteapp; } location @rewriteapp { rewrite ^(.*)$ /app.php/$1 last; } location ~ ^/(app|app_dev|config).php(/|$) { fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(.+.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; } } 7
  • 8. Symfony2 Bundle: php app/console generate:bundle --namespace=Blog/BlogBundle --format=yml • Controller/ Содержит код контроллеров(например: HelloController.php); • DependencyInjection/ Содержит настройки управления зависимостями (необязательна); • Resources/config/ Настройки бандла (например: routing.yml); • Resources/views/ Хранилище шаблонов, организованных по именам контроллера (например: Hello/index.html.twig); • Resources/public/ Публичные файлы (изображения, стили, и т.д.), копируются в корневую директорию проекта web/ directory командой assets:install console command; • Tests/ Директория с тестами. 8
  • 9. Symfony2 Controller: • Запрос приходит на front controller (app.php) • Ядро Symfony2 (Kernel) отправляет запрос в роутер • Запрос разбирается роутером (routing.yml). Определяется имя контроллера. • Ядро Symfony2 (Kernel) выполняет код контроллера, который обязательно возвращает объект ответа (Response) 9
  • 10. Symfony2 Резюме:  Для создания страницы требуется выполнить три простых шага: - создать роут - создать контроллер - создать шаблон  Всё в symfony организованно в бандлы  Настройки можно найти в директори Resources/config бандла  Глобальные настройки находятся в директории app/config 10
  • 11. Symfony2 TWIG: • Быстрый • Надёжный • Краткий • Гибкий • Лёгкий в освоении • Расширяемый • Полностью покрыт тестами • Хорошо задокументирован • Безопасный 11
  • 12. Symfony2 TWIG: • Переменные {{ foo.bar }} {{ foo['bar'] }} • Циклы {% for user in users %} <li>{{ user.username|e }}</li> {% endfor %} • Условия {% if users|length > 0 %} {{ user.username }} {% endif %} • Фильтры {# очищаем от html тегов #} {{ name|striptags }} {# переводим всё в верхний регистр #} {% filter upper %} This text becomes uppercase {% endfilter %} • Вложения {% include 'sidebar.html' %} • Комментарии {# комментарии пишут так #} 12
  • 13. Symfony2 Doctrine2:  Создать базу данных php app/console doctrine:database:create  Создать сущность php app/console doctrine:generate:entity --entity="BlogBlogBundle:Post"  Сгенерировать класс php app/console doctrine:generate:entities BlogBlogBundle  Сгенерировать таблицы в базе php app/console doctrine:schema:update --force 13
  • 14. Symfony2 DI: # app/config/config.yml services: post_repository: class: BlogBlogBundleEntityPostRepository factory_service: doctrine.orm.default_entity_manager factory_method: getRepository arguments: - BlogBlogBundle:Post searcher: class: BlogBlogBundleLibSearcherSearcher arguments: [@post_repository] 14
  • 15. Контакты Евгений Кривошеев, ekrivosheyev@scrumtrek.ru Никита Филиппов, nfilippov@scrumtrek.ru Асхат Уразбаев, askhat@scrumtrek.ru Александр Егурцов, egurtsov@gmail.com «Тяжело в учении – легко в бою» SkillTrek – это дистанционный центр компетенций, где специалисты получают востребованные на рынке знания и навыки в условиях реальных проектов с выбором удобной им загрузки 15