Как стать автором
Поиск
Написать публикацию
Обновить
4.8

Symfony *

Свободный фреймворк, написанный на PHP5

Сначала показывать
Порог рейтинга
Уровень сложности

PHP-Дайджест № 151 (25 февраля – 11 марта 2019)

Время на прочтение4 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: обновления PHP, Laravel 5.8, Xdebug 2.7 и другие релизы, 3 свежих RFC, 2 принятых, и концепт из PHP Internals, порция полезных инструментов, и многое другое.

Приятного чтения!


Читать дальше →

PHP: изменение стуктуры БД в командной разработке

Время на прочтение6 мин
Количество просмотров9K


В мире PHP хорошо известны инструменты миграций структуры БД — Doctrine, Phinx от CakePHP, от Laravel, от Yii — это то первое, что пришло в голову. Наверняка, есть еще с десяток. И большинство из них работают с миграциями — командами для внесения инкрементных изменений в схему базы данных.

Я не буду описывать зачем это, на хабре много постов на эту тему. Например:


Далее, развитие моего опыта работы в команде с постоянным изменением структуры БД в разных ветках.
Читать дальше →

PHP-Дайджест № 150 (11 – 25 февраля 2019)

Время на прочтение3 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: изменены правила голосования за RFC в PHP Internals, стартовал прием заявок на доклады для PHP Russia 2019, новое расширение для реализации параллельного исполнения кода, свежие материалы для обучения, видео, порция полезных инструментов, и многое другое.

Приятного чтения!


Читать дальше →

PHP-Дайджест № 149 (28 января – 11 февраля 2019)

Время на прочтение4 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 8 и другие релизы, PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка свежих RFC из PHP Internals, порция полезных инструментов, и многое другое.

Приятного чтения!


Читать дальше →

Сериализация данных на уровне базы

Время на прочтение3 мин
Количество просмотров7.7K

Привет, Хабр!


Сидел я как-то и пытался отдать фронту JSON с объектами недвижимости, у которых была масса зависимостей. На бэке стояла Symfony 4, knp pagination и JMSSerializer, ну в принципе стандартные вещи, но проблема в том, что когда ты пытаешься отдать объект со всеми вложенными сущностями и коллекциями, то все начинает тормозить на уровне сериализации этих данных.


Сначала нужно сделать запрос в базу, потом сериализатор подтянет постепенно все остальное, потом все это будет обернуто в JSON и только потом все вернется на фронт.


Идея


У меня появилась идея, а почему бы не возвращать на фронт с бэка сразу JSON напрямую из базы, да, надо написать офигительный SQL, но ведь можно сделать инструмент который это сделает за вас. Я принялся за написание идеи, репозиторий на гитхабе, за основу взята модель данных из доктрины, связи OneToOne, ManyToOne, OneToMany и ManyToMany. Так же этот инструмент легко можно прикрутить к Symfony 4 и он сам себя настроит, в итоге вам нужно будет только заинъектить фабрику QueryBuilderFactory и получить оттуда QueryBuilder для нужной таблицы по классу сущности.


Так же мой сериализатор использует группы сериализации которые вы можете задать с помощью аннотации Expose на поле сущности, не забудьте так же на сущность навесить аннотацию Table и указать алиас таблицы, лучше использовать те, которые вы обычно задаете.


Пример генерации SQL


<?php

use \Mash\MysqlJsonSerializer\QueryBuilder\Table\JoinStrategy\FieldStrategy;
use \Mash\MysqlJsonSerializer\Wrapper\FieldWrapper;
use \Mash\MysqlJsonSerializer\QueryBuilder\Table\Table;
use \Mash\MysqlJsonSerializer\Wrapper\Mapping;
use \Mash\MysqlJsonSerializer\QueryBuilder\QueryBuilder;

$oneToManyTable = (new Table('advert_group', 'adg', 'adg_id'))
    ->addSimpleField('adg_id')
    ->addSimpleField('adg_name')
;

$table = (new Table('estate', 'est', 'est_id'))
    ->addSimpleField('est_id')
    ->addSimpleField('est_name')
    ->addOneToManyField($oneToManyTable, 'advert_groups', new FieldStrategy('adg_estate'));

$mapping = new Mapping();
$mapping
    ->addMap($table, 'est_id', 'id')
    ->addMap($table, 'est_name', 'name')
    ->addMap($oneToManyTable, 'adg_id', 'id')
    ->addMap($oneToManyTable, 'adg_name', 'name');

$builder = new QueryBuilder($table, new FieldWrapper($mapping));
$builder
    ->setOffset(2)
    ->setLimit(1);

$sql = $builder->jsonArray();

В результате будет сгенерирован следующий SQL:


SELECT JSON_ARRAYAGG(JSON_OBJECT('id',est_res.est_id,'name',est_res.est_name,'advert_groups',(SELECT JSON_ARRAYAGG(JSON_OBJECT('id',adg.adg_id,'name',adg.adg_name)) FROM advert_group adg INNER JOIN estate est_2 ON est_2.est_id = adg.adg_estate WHERE est_2.est_id = est_res.est_id))) FROM (SELECT * FROM estate est  LIMIT 1 OFFSET 2) est_res

Результат:


[{"id": 3, "name": "Москва, окская улица, 3к1", "advert_groups": [{"id": 10, "name": "avito-1115362430"}]}]
Читать дальше →

PHP-Дайджест № 148 (14 – 28 января 2019)

Время на прочтение4 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: взломан репозиторий PEAR, о будущем Xdebug, конференция PHP Russia 2019, свежие релизы, RFC предложения из PHP Internals, порция полезных инструментов, и многое другое.

Приятного чтения!


Читать дальше →

PHP-Дайджест № 147 (1 – 14 января 2019)

Время на прочтение3 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: обновления всех веток PHP, Deployer 6.4, doctrine/migrations 2.0, Psalm 3 и другие релизы, Никита Попов в JetBrains, новости PHP Internals, порция полезных инструментов, видео, и многое другое.

Приятного чтения!

Читать дальше →

PHP-Дайджест № 146 (10 – 24 декабря 2018) + Итоги 2018 года

Время на прочтение5 мин
Количество просмотров16K

По традиции подведем итоги уходящего года и вспомним самые значимые события в мире PHP. И конечно, ссылки на свежие новости, полезные инструменты и интересные материалы за последние две недели.


Под катом вас также ждет розыгрыш лицензий на PhpStorm от JetBrains.

Приятного чтения и с наступающим Новым годом!


Читать дальше →

PHP-Дайджест № 145 (26 ноября – 10 декабря 2018)

Время на прочтение5 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.3.0, Symfony 4.2, Composer 1.8.0 и другие релизы, конец поддержки PHP 5.6 и PHP 7.0, свежие предложения из PHP Internals, порция полезных инструментов, видеозаписи докладов и многое другое.
Приятного чтения!


Читать дальше →

PHP-Дайджест № 144 (12 – 26 ноября 2018)

Время на прочтение5 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.3.0RC6, PhpStorm 2018.3 и другие релизы, Symfony покидает PHP-FIG, свежие предложения и новости PHP Internals, порция полезных инструментов, видеозаписи с прошедших митапов и конференций и многое другое.
Приятного чтения!


Symfony Bundle для экспорта статистик в формате Prometheus

Время на прочтение12 мин
Количество просмотров7.1K


Работая над разными микро (и не очень) сервисами, написанными с помощью Symfony, я каждый раз сталкивался с необходимостью экспорта метрик для Prometheus. Поначалу мы просто копировали один и тот же код между проектами, но когда их стало больше трёх, я посчитал, что дальше так продолжаться не может (не буду вас тут утомлять объяснениями, почему это неудобно; думаю, каждый это и сам понимает).

Было решено выделить всё это хозяйство в отдельный бандл: ArtprimaPrometheusMetricsBundle.
Читать дальше →

PHP-Дайджест № 143 (1 – 12 ноября 2018)

Время на прочтение3 мин
Количество просмотров14K

Свежая подборка со ссылками на новости и материалы. В выпуске: принят PSR-18, статистика версий PHP от Packagist, анонсы митапов и карта митапов, PHP 7.3.0RC5 и другие релизы, порция полезных инструментов, о будущем PHP-дайджеста, и многое другое.
Приятного чтения!


Читать дальше →

PHP-Дайджест № 142 (15 – 29 октября 2018)

Время на прочтение4 мин
Количество просмотров15K

Свежая подборка со ссылками на новости и материалы. В выпуске: Будущее PHP и Zend Framework, RFC из PHP Internals о повышении производительности, порция полезных инструментов, новый слоник PHP доступен для заказа, и многое другое.

Приятного чтения!

Читать дальше →

Ближайшие события

PHP-Дайджест № 141 (1 – 15 октября 2018)

Время на прочтение3 мин
Количество просмотров16K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.3.0RC3, CodeIgniter 4.0.0 alpha1 и другие релизы, 62% сайтов работает на PHP 5, видеозаписи докладов с конференций и митапов, порция полезных инструментов, и многое другое.
Приятного чтения!


Читать дальше →

PHP-Дайджест № 140 (17 – 30 сентября 2018)

Время на прочтение4 мин
Количество просмотров17K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.3 RC2, Codeception 2.5 и другие релизы, типизированные свойства в PHP 7.4, концепт предзагрузки кода от Дмитрия Стогова, порция полезных инструментов, и многое другое.
Приятного чтения!


PHP-Дайджест № 139 (3 – 17 сентября 2018)

Время на прочтение4 мин
Количество просмотров17K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.3 RC 1, PhpStorm 2018.3 EAP, Laravel 5.7 и другие релизы, HHVM прекращает поддержку PHP, типизированные свойства в PHP, порция полезных инструментов, видеозаписи докладов, и многое другое.
Приятного чтения!

PHP-Дайджест № 138 (20 августа – 2 сентября 2018)

Время на прочтение3 мин
Количество просмотров12K

Свежая подборка со ссылками на новости и материалы. В выпуске: последняя бета PHP 7.3, Laravel Nova, сайт с идеями для следующих версий PHP, новости о Yii 3, порция полезных инструментов, видео, и многое другое. Приятного чтения!


Читать дальше →

Docker для Symfony 4 — от локалки до production

Время на прочтение15 мин
Количество просмотров50K

Предистория


Одним прекрасным днём мне понадобилось развернуть среду разработки для своего проекта. Vagrant уже порядком поднадоел и хотелось иметь единую среду разработки для всех участников проекта которая была бы идентичной production серверу. Соответственно наслушавшись информации про хипстерский docker, я решил начать с ним разбираться. Далее я постараюсь максимально подробно описать все шаги начиная от установки докера на локалке вплоть до разворачивания продуктива на KVM.

Исходный стек технологий:

— Docker
— Symfony 4
— nginx
— php-fpm
— postgresql
— elasticsearch
— rabbitmq
— jenkins

Железо:

— ноутбук под ОС Ubuntu 16.04
— продакшн сервер на хостинге KVM

Почему кроме технологического стека я перечислил ещё и стек железа?

Если вы никогда ранее не работали с докером, то вы можете столкнуться с рядом проблем, связанных именно с железом, операционной системой вашего ноутбука или типом виртуализации на хостинге.

Первый и наверно самый важный аспект при начале работы с докером — это операционная система вашего ноутбука. Проще всего работать с докером именно на linux системах. Если вы работаете на Windows или Mac то у вас 100 % будут некоторые сложности, но эти сложности не будут являться критическими и при желании «нагуглить» как это исправляется не составит никаких проблем.

Второй вопрос — это хостинг. Зачем нужен Hosting именно с типом виртуализации KVM? Причина в том, что виртуализация VPS разительно отличается от KVM и установить сам docker на VPS у вас попросту не выйдет, так как VPS распределяет ресурсы сервера динамически.

Подитог: для самого быстрого старта на докере резоннее всего выбирать Ubuntu в качестве локальной операционки и KVM хостинг (либо собственный сервер). Далее рассказ пойдёт опираясь именно на эти две составляющие.
Читать дальше →

PHP-Дайджест № 137 (6 – 20 августа 2018)

Время на прочтение3 мин
Количество просмотров14K

PHP 7.3.0 Beta 2 и другие релизы, предложение из PHP Internals, порция полезных инструментов, видеозапись «Пишем блокчейн на PHP», и многое другое.
Приятного чтения!


Читать дальше →

Пошаговое создание бандла для Symfony 4

Время на прочтение16 мин
Количество просмотров28K

Около года назад наша компания взяла курс на разделение огромного монолита на Magento 1 на микросервисы. Как основу выбрали только вышедшую в релиз Symfony 4. За это время я разработал несколько проектов на этом фреймворке, но особо интересной мне показалась разработка бандлов, переиспользуемых компонентов для Symfony. Под катом пошаговое руководство по разработке HealthCheck бандла для получения статуса/здоровья микросервиса под Syfmony 4.1, в котором я постарался затронуть наиболее интересные и сложные (для меня когда-то) моменты.

Читать дальше →