Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Symfony2. На чём можносэкономить время при разработке?            Stepan Tanasiychuk             ceo@stfalcon.com
### Нам проще переписать. Оноглюкавое, тормозное, etc.Это отмазки :)Глюкавое — покрой тестами.Тормозное — пройдисьпрофайле...
Да, велосипеды это круто!
Но готовые решения —      экономят время.
### SonataAdminBundle<parameters>  <parameter key="stfalcon_page.admin.page.class">     StfalconBundlePageBundleAdminPageA...
### SonataAdminBundleclass PageAdmin extends Admin {   protected function configureListFields(ListMapper $listMapper) {   ...
### SonataAdminBundle
### SonataAdminBundleclass PageAdmin extends Admin {   protected function configureListFields(ListMapper $listMapper) {   ...
### SonataAdminBundle
### SensioFrameworkExtraBundle/** * @Route("/page/{slug}") * @Template() * @Cache(smaxage="15") */public function showActi...
### JMSSecurityExtraBundle/** * @Secure(roles="ROLE_USER, ROLE_ADMIN") */public function secureAction(){    // ...}
### AsseticBundle# config.ymlassetic:   use_controller: false   filters:       yui_css:          jar: "%kernel.root_dir%/y...
### StofDoctrineExtensionsBundle* Tree* Translatable* Sluggable* Timestampable* Loggable
### StofDoctrineExtensionsBundle/** * @ORMEntity */class Page{    /**     * @var DateTime $createdAt     *     * @ORMColum...
### DoctrineFixturesBundleclass LoadPageData extends AbstractFixture {   public function load($em) {     $page = new Page(...
### DoctrineMigrationsBundle
### А также:* FOSUserBundle* FOSCommentBundle* KnpMenuBundle* KnpPaginatorBundle* AvalancheImagineBundleи другие бандлы =>
### http://symfony2bundles.org
### http://symfohub.com/bundles
Тестирование
### Тесты не экономят время?Сравните время на:* Рефакторинг кода* Внедрение новых фич* Полную проверка функционалаперед ка...
### LiipFunctionalTestBundle* Фикстуры* Сахар (fetchContent, fetchCrawler,getUrl, isSuccessful)* HTML5
### BehatBundle & MinkBundle# language: ruФункционал: Первый тест для AcmeDemoBundle Тестируем реализованные возможности в...
Кодогенерация
### SensioGeneratorBundlegenerate:bundlegenerate:doctrine:crudgenerate:doctrine:entitiesgenerate:doctrine:entitygenerate:d...
### Подведем итоги:* Используйте готовые решения(бандлы)* Пишите тесты* Генерируйте кодИ получите профит :)
### Благодарю за внимание ;)       Готов ответить на вопросыStepan Tanasiychukceo@stfalcon.com@stfalconhttp://github.com/s...
Upcoming SlideShare
Loading in …5
×

Symfony2. На чем можно сэкономить время при разработке?

10,077 views

Published on

Symfony2. На чем можно сэкономить время при разработке?

  1. 1. Symfony2. На чём можносэкономить время при разработке? Stepan Tanasiychuk ceo@stfalcon.com
  2. 2. ### Нам проще переписать. Оноглюкавое, тормозное, etc.Это отмазки :)Глюкавое — покрой тестами.Тормозное — пройдисьпрофайлером, исправь и отправьpull request.
  3. 3. Да, велосипеды это круто!
  4. 4. Но готовые решения — экономят время.
  5. 5. ### SonataAdminBundle<parameters> <parameter key="stfalcon_page.admin.page.class"> StfalconBundlePageBundleAdminPageAdmin </parameter> <parameter key="stfalcon_page.admin.page.entity"> StfalconBundlePageBundleEntityPage </parameter> <parameter key="stfalcon_page.admin.page.controller"> SonataAdminBundle:CRUD </parameter></parameters><services> <service id="stfalcon_page.admin.page" class="%stfalcon_page.admin.page.class%"> <tag name="sonata.admin" manager_type="orm" group="Pages" label="page"/> <argument /> <argument>%stfalcon_page.admin.page.entity%</argument> <argument>%stfalcon_page.admin.page.controller%</argument> </service></services>
  6. 6. ### SonataAdminBundleclass PageAdmin extends Admin { protected function configureListFields(ListMapper $listMapper) { return $listMapper ->addIdentifier(slug) ->add(title); } protected function configureFormFields(FormMapper $formMapper) { return $formMapper ->with(General) ->add(slug) ->add(title) ->add(text) ->end(); }}
  7. 7. ### SonataAdminBundle
  8. 8. ### SonataAdminBundleclass PageAdmin extends Admin { protected function configureListFields(ListMapper $listMapper) { return $listMapper ->addIdentifier(slug) ->add(title); } protected function configureFormFields(FormMapper $formMapper) { return $formMapper ->with(General) ->add(slug) ->add(title) ->add(text) ->end(); }}
  9. 9. ### SonataAdminBundle
  10. 10. ### SensioFrameworkExtraBundle/** * @Route("/page/{slug}") * @Template() * @Cache(smaxage="15") */public function showAction(Page $post){ return array(page => $page);}
  11. 11. ### JMSSecurityExtraBundle/** * @Secure(roles="ROLE_USER, ROLE_ADMIN") */public function secureAction(){ // ...}
  12. 12. ### AsseticBundle# config.ymlassetic: use_controller: false filters: yui_css: jar: "%kernel.root_dir%/yuicompressor-2.4.6.jar"{# layout.html.twig #}{% stylesheets css/style.css filter=yui_css output="tmp/css/*.css" %} <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />{% endstylesheets %}
  13. 13. ### StofDoctrineExtensionsBundle* Tree* Translatable* Sluggable* Timestampable* Loggable
  14. 14. ### StofDoctrineExtensionsBundle/** * @ORMEntity */class Page{ /** * @var DateTime $createdAt * * @ORMColumn(name="created_at", type="datetime") * @GedmoTimestampable(on="create") */ private $createdAt;
  15. 15. ### DoctrineFixturesBundleclass LoadPageData extends AbstractFixture { public function load($em) { $page = new Page(); $page->setTitle(Contacts); $page->setSlug(contacts); $page->setText(ceo@stfalcon.com); $em->persist($page); $em->flush(); }}$ php app/console doctrine:fixtures:load
  16. 16. ### DoctrineMigrationsBundle
  17. 17. ### А также:* FOSUserBundle* FOSCommentBundle* KnpMenuBundle* KnpPaginatorBundle* AvalancheImagineBundleи другие бандлы =>
  18. 18. ### http://symfony2bundles.org
  19. 19. ### http://symfohub.com/bundles
  20. 20. Тестирование
  21. 21. ### Тесты не экономят время?Сравните время на:* Рефакторинг кода* Внедрение новых фич* Полную проверка функционалаперед каждым релизомС тестами и без => тесты рулят!ps. и используйте CI
  22. 22. ### LiipFunctionalTestBundle* Фикстуры* Сахар (fetchContent, fetchCrawler,getUrl, isSuccessful)* HTML5
  23. 23. ### BehatBundle & MinkBundle# language: ruФункционал: Первый тест для AcmeDemoBundle Тестируем реализованные возможности вдемонстрационном бандле Сценарий: Открыть главную страницу в dev окружении иубедиться в ее существовании Допустим я на странице "/app_dev.php" Тогда код ответа сервера должен быть 200 И я должен видеть "Congratulations! You have successfullyinstalled a new Symfony application." И я должен видеть "Welcome!"
  24. 24. Кодогенерация
  25. 25. ### SensioGeneratorBundlegenerate:bundlegenerate:doctrine:crudgenerate:doctrine:entitiesgenerate:doctrine:entitygenerate:doctrine:form
  26. 26. ### Подведем итоги:* Используйте готовые решения(бандлы)* Пишите тесты* Генерируйте кодИ получите профит :)
  27. 27. ### Благодарю за внимание ;) Готов ответить на вопросыStepan Tanasiychukceo@stfalcon.com@stfalconhttp://github.com/stfalcon

×