Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TulaCo PHP Framework или построение корпоративного фреймворка на базе ZF2

Dd3f18c87b851137000c7427d7bd5d32?s=47 fwdays
October 18, 2013

TulaCo PHP Framework или построение корпоративного фреймворка на базе ZF2

Dd3f18c87b851137000c7427d7bd5d32?s=128

fwdays

October 18, 2013
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. TulaCo PHP Framework построение корпоративного фреймворка на базе ZF2 Даниил

    Кожемяко Team Leader, TulaCo d.kozhemyako@gmail.com @kozhemyako https://github.com/dannytrue http://zf2.by/
  2. Жизненный цикл проекта

  3. Суровая реальность

  4. Что мы хотим получить

  5. Что мы получаем

  6. Как этого избежать?

  7. Выбрать правильный фреймворк!

  8. Выбрать правильный фреймворк! • хороший • удобный • мощный •

    быстрый • покрытый тестами • легко расширяемый • хорошо документированный
  9. Выбрать правильный фреймворк!

  10. Выбрать правильный фреймворк!

  11. Компоненты • Log system • Mail system • Media system

    • Message system • RESTful API • Simple Article system • User Auth system • User management • User settings • Admin interface • ADS management • Catalog system • CLI interface • Comment system • Core • Grid system • Info pages system • Integration with Social Networks
  12. Admin UI

  13. Навигация

  14. Routing

  15. Navigation Container

  16. View helper

  17. CLI

  18. CLI Routing

  19. CLI Routing

  20. CLI Controller

  21. Аутентификация и Авторизация

  22. ZendAuthentication

  23. ZF-Commons • zfc-base • zfc-user ◦ Регистрация ◦ Аутентификация •

    zfc-user-doctrine-orm ◦ Адаптер для работы через Doctrine 2 • zfc-rbac ◦ Авторизация ▪ Роли ▪ Разрешения ▪ Динамические роли ▪ Фаерволы
  24. ZF-Commons/Zfc-User

  25. ZF-Commons/Zfc-User

  26. ZF-Commons/Zfc-Rbac

  27. Event Manager

  28. ListenerAggregate

  29. ListenerAggregate + Trait

  30. Подключение слушателя

  31. Срабатывание события

  32. ZendForm + Doctrine2

  33. Простая форма

  34. Непростая задача

  35. Хранение в БД

  36. Сложная форма "dannytrue/dlutwbootstrap": "dev-master"

  37. ZendForm Collection

  38. ZendForm Collection in use

  39. Zend\Form\Element\Select + DB ?

  40. DoctrineModule ObjectSelect

  41. DoctrineModule\Form\Element

  42. DoctrineModule\Form\Element

  43. DoctrineModule\Form\Element

  44. FileUpload

  45. Создание и управление таблицами

  46. Grid UI

  47. Возможности • Сортировка данных • Фильтрация данных • Постраничный вывод

    результатов • Редактирование данных прямо в таблице • Возможность изменения сразу несколько строк • Стандартные экшн кнопки (редактировать, удалить) • Кастомные кнопки (пересчитать, отправить в космос) • Поддержка разных типов данных с преобразованием через фильтр • Кастомные CSS стили, классы • Поддержка различных шаблонов • Легкость использования “из коробки” • Легкость программирования дополнительного функционала • Кроссбраузерность
  48. Минимальная конфигурация class IndexController extends CRUDController { … public function

    listAction() { $this->setPreviousUrl(); $view = new ViewModel( array( 'title' => $this->getTitle(), 'gridOptions' => array('controller' => $this), ) ); $view->setTemplate($this->getListTemplate()); return $view; } … } Вызов в шаблоне: <?php echo $this->gridHelper($gridOptions) ?>
  49. Расширенные настройки ‘controller’ - контроллер Type: instanceof \TulaBase\Controller\CRUDController ‘model’ -

    DomainModel или её имя класса откуда будут браться данные. Type: instanceof \TulaBase\Model\Domain ‘repository’ - объект репозитория. Type: instanceof \Doctrine\ORM\EntityRepository ‘order’ - массив параметров сортировки. Type: array ‘queryBuilder’ - в него устанавливаются все фильтры и сортировки. Type: instanceof \Doctrine\ORM\QueryBuilder. ‘displayColumns’ - колонки, которые будут показаны в гриде Type: array ‘excludingColumns’ - колонки у которых будет отсутствовать сортировка и фильтрация Type: array ‘columnOutputCallbacks’ - массив обработчиков вывода значений в ячейки Type: array ‘buttons’ - набор кнопок, который будет показан напротив каждой записи в столбце ‘Action’ Type: array
  50. Paginator

  51. Paginator

  52. Производительность

  53. Способы • Autoloader Classmap • Template Map • Plugin Map

    • Module Config Cache • Cache Query result • Full page cache • Lazy Load
  54. Autoloader Classmap php vendor/bin/classmap_generator.php 1.82s > 1.54s

  55. Template Map php vendor/bin/classmap_generator.php 1.45s > 1.28s

  56. Plugin Map php vendor/bin/pluginmap_generator.php 1.50s > 1.28s

  57. Module Config Cache 1.28s > 1.20s config/application.config.php

  58. Cache Query result

  59. Full page cache "stroker/cache" • By route name • By

    controller class name • By regex on the URI
  60. Cache by route name

  61. Lazy services - service proxies Вызов: Время выполнения ~ 10

    секунд
  62. Lazy services - service proxies Lazy load: Время выполнения ~

    0 секунд
  63. Спасибо за внимание! d.kozhemyako@gmail.com @kozhemyako https://github.com/dannytrue http://zf2.by/