Upload
stepan-tanasiychuk
View
9.582
Download
3
Embed Size (px)
DESCRIPTION
Citation preview
Stepan [email protected]
Symfony2. На чём можно сэкономить время при разработке?
### Нам проще переписать. Оно глюкавое, тормозное, etc.
Это отмазки :)
Глюкавое — покрой тестами.Тормозное — пройдись профайлером, исправь и отправь pull request.
Да, велосипеды это круто!
Но готовые решения —экономят время.
### 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>
### 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(); }}
### SonataAdminBundle
### 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(); }}
### SonataAdminBundle
### SensioFrameworkExtraBundle
/** * @Route("/page/{slug}") * @Template() * @Cache(smaxage="15") */public function showAction(Page $post){ return array('page' => $page);}
### JMSSecurityExtraBundle
/** * @Secure(roles="ROLE_USER, ROLE_ADMIN") */public function secureAction(){
// ...}
### 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 %}
### StofDoctrineExtensionsBundle
* Tree* Translatable* Sluggable* Timestampable* Loggable
### StofDoctrineExtensionsBundle
/** * @ORM\Entity */class Page{ /** * @var \DateTime $createdAt * * @ORM\Column(name="created_at", type="datetime") * @Gedmo\Timestampable(on="create") */ private $createdAt;
### 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
### DoctrineMigrationsBundle
### А также:
* FOSUserBundle* FOSCommentBundle* KnpMenuBundle* KnpPaginatorBundle* AvalancheImagineBundle
и другие бандлы =>
### http://symfony2bundles.org
### http://symfohub.com/bundles
Тестирование
### Тесты не экономят время?
Сравните время на:* Рефакторинг кода* Внедрение новых фич* Полную проверка функционала перед каждым релизомС тестами и без => тесты рулят!
ps. и используйте CI
### LiipFunctionalTestBundle
* Фикстуры* Сахар (fetchContent, fetchCrawler, getUrl, isSuccessful)* HTML5
### BehatBundle & MinkBundle
# language: ru
Функционал: Первый тест для AcmeDemoBundle Тестируем реализованные возможности в демонстрационном бандле
Сценарий: Открыть главную страницу в dev окружении и убедиться в ее существовании Допустим я на странице "/app_dev.php" Тогда код ответа сервера должен быть 200 И я должен видеть "Congratulations! You have successfully installed a new Symfony application." И я должен видеть "Welcome!"
Кодогенерация
### SensioGeneratorBundle
generate:bundlegenerate:doctrine:crudgenerate:doctrine:entitiesgenerate:doctrine:entitygenerate:doctrine:form
### Подведем итоги:
* Используйте готовые решения (бандлы)* Пишите тесты* Генерируйте код
И получите профит :)
### Благодарю за внимание ;)
Готов ответить на вопросы
Stepan [email protected]@stfalconhttp://github.com/stfalcon