27
Stepan Tanasiychuk [email protected] Symfony2. На чём можно сэкономить время при разработке?

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Stepan [email protected]

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

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

### Нам проще переписать. Оно глюкавое, тормозное, etc.

Это отмазки :)

Глюкавое — покрой тестами.Тормозное — пройдись профайлером, исправь и отправь pull request.

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

Да, велосипеды это круто!

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

Но готовые решения —экономят время.

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

### SonataAdminBundle<parameters> <parameter key="stfalcon_page.admin.page.class"> Stfalcon\Bundle\PageBundle\Admin\PageAdmin </parameter> <parameter key="stfalcon_page.admin.page.entity"> Stfalcon\Bundle\PageBundle\Entity\Page </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>

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

### 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(); }}

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

### SonataAdminBundle

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

### 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(); }}

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

### SonataAdminBundle

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

### SensioFrameworkExtraBundle

/** * @Route("/page/{slug}") * @Template() * @Cache(smaxage="15") */public function showAction(Page $post){ return array('page' => $page);}

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

### JMSSecurityExtraBundle

/** * @Secure(roles="ROLE_USER, ROLE_ADMIN") */public function secureAction(){

// ...}

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

### 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 %}

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

### StofDoctrineExtensionsBundle

* Tree* Translatable* Sluggable* Timestampable* Loggable

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

### StofDoctrineExtensionsBundle

/** * @ORM\Entity */class Page{ /** * @var \DateTime $createdAt * * @ORM\Column(name="created_at", type="datetime") * @Gedmo\Timestampable(on="create") */ private $createdAt;

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

### DoctrineFixturesBundle

class LoadPageData extends AbstractFixture { public function load($em) { $page = new Page(); $page->setTitle('Contacts'); $page->setSlug('contacts'); $page->setText('[email protected]'); $em->persist($page); $em->flush(); }}

$ php app/console doctrine:fixtures:load

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

### DoctrineMigrationsBundle

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

### А также:

* FOSUserBundle* FOSCommentBundle* KnpMenuBundle* KnpPaginatorBundle* AvalancheImagineBundle

и другие бандлы =>

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

### http://symfony2bundles.org

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

### http://symfohub.com/bundles

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

Тестирование

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

### Тесты не экономят время?

Сравните время на:* Рефакторинг кода* Внедрение новых фич* Полную проверка функционала перед каждым релизомС тестами и без => тесты рулят!

ps. и используйте CI

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

### LiipFunctionalTestBundle

* Фикстуры* Сахар (fetchContent, fetchCrawler, getUrl, isSuccessful)* HTML5

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

### BehatBundle & MinkBundle

# language: ru

Функционал: Первый тест для AcmeDemoBundle Тестируем реализованные возможности в демонстрационном бандле

Сценарий: Открыть главную страницу в dev окружении и убедиться в ее существовании Допустим я на странице "/app_dev.php" Тогда код ответа сервера должен быть 200 И я должен видеть "Congratulations! You have successfully installed a new Symfony application." И я должен видеть "Welcome!"

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

Кодогенерация

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

### SensioGeneratorBundle

generate:bundlegenerate:doctrine:crudgenerate:doctrine:entitiesgenerate:doctrine:entitygenerate:doctrine:form

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

### Подведем итоги:

* Используйте готовые решения (бандлы)* Пишите тесты* Генерируйте код

И получите профит :)

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

### Благодарю за внимание ;)

Готов ответить на вопросы

Stepan [email protected]@stfalconhttp://github.com/stfalcon