Как стать автором
Обновить

Фильтрация данных в Symfony

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

Всем любителям Symfony известно что в ней нету компонента фильтр.
Есть замечательные и удобные Constraints и даже была попытка создать на подобии их фильтры issue на Github, но никто так и не взялся это сделать.


Когда я в очередной раз столкнулся с задачей фильтрации большого количества данных, полученных от пользователя, я понял что пора решить задачу фильтрации как то более глобально/красиво/удобно.

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

PHP: атрибуты vs аннотации: оптимизируем метадату Doctrine

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

Одним из нововведений PHP 8.0 являются атрибуты. Атрибуты содержат метадату для классов, полей, функций; которая доступна через Reflection API. Казалось бы, то же самое, что и аннотации, тогда зачем обращать внимание на эту фичу?

Читать далее

Внедрение Doctrine ORM в Wordpress

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2K

Статья про то, как можно весьма не сложно внедрить Doctrine ORM в ядро CMS Wordpress без потери производительности. Все вопросы и утверждения по типу: «А зачем», «А почему», «Да это только наложит дополнительный оверхэд и ничего с этого не выйграешь», возможно, будут проигнорированы:)

Читать далее

Пагинация в Doctrine (Использование SQL_CALC_FOUND_ROWS)

Время на прочтение5 мин
Количество просмотров7.8K
Начиная от версии 4.0 в СУБД MySQL появилась достаточно удобная возможность подсчета количества всех подходящих под запрос записей, когда количество записей ограничивается LIMIT’ом. При работе с поиском в БД, а так же при выборках из таблиц с большим количеством записей такой функционал просто необходим. В этой статье я расскажу, как можно использовать эту возможность в ORM Doctrine
и как же?

Точные имена свойств модели в Doctrine

Время на прочтение6 мин
Количество просмотров1.6K
Эта статья посвящена точному(с учётом регистра) отображению названий колонок таблицы БД в свойства модели. Данная проблема актуальна для 1ой ветки ORM, т.к. во второй ветке она похоже уже решена. Но т.к. стабильным релизом на данный момент является версия 1.2.1 а версия 2 в стадии ALPHA4, то думаю, что эта проблема актуальная для многих пользователей ORM.
Читать дальше

Symfony Live 2010. День первый

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

Вчера, 16 февраля прошел первый день двухдневной международной конференции Symfony Live 2010, посвященный, как не трудно догадаться, фреймворку Symfony: )

Это первая международная конференция, проводимая sensio labs.

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

Вот он какой, Doctrine 2.0 (Приурочено к релизу Doctrine 2.0 Alpha 3)

Время на прочтение3 мин
Количество просмотров2.1K
image
Поздравляю, коллеги! 3 дня назад увидела свет треться альфа-версия самого мощного на сегодняшний день ORM-фреймворка для PHP: Doctrine.

И эта новость по большему счету заслуживает внимания потому что в Doctrine 2.0 произошли очень существенные изменения в сравнении с предыдущими версиями. Сразу замечу, что вкусности эти потребуют от нас ни много ни мало — поддержку php 5.3.
Читать дальше →

Doctrine Specification Pattern или ваш реюзабельный QueryBuilder

Время на прочтение5 мин
Количество просмотров18K
Я постараюсь максимально коротко рассказать о том, как можно использовать этот паттерн с нашей любимой Doctrine на примерах и почему так делать — true.

Давайте представим себе базовый кейс:

  1. У нас есть: сущность «Дом», сущность «Квартира в доме», сущность «Застройщик», сущность «Регион».
  2. У нас есть задача: иметь возможность получить всех застройщиков, иметь возможность получить все занятые регионы застройщиком, уметь возможность получить все дома, которые принадлежат застройщику и все доступные регионы вообще в принципе, где ведутся продажи домов.
  3. У нас есть правила от бизнеса:
Читать дальше →

DDD на практике. Проектирование списка желаний

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

В интернете довольно много разрозненного материала по DDD. Если не считать синей книги, то в основном это короткие статьи с теорией, надёрганной из этой же книги, и которая мало пересекается с практикой. Возможно, конечно, что я просто плохо искал, но мне давно хотелось найти какой-нибудь цельный пример, что называется, «от и до». И я решил такой пример создать на Symfony 3 и VueJS. Сразу хочу сказать, что я изучаю DDD недавно, поэтому взял довольно простую предметную область — список желаний (wish list).

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

Doctrine, расширяем возможности любимого ORM-фреймворка! Часть 1.а (I18n, быстрый доступ к переводимым атрибутам)

Время на прочтение9 мин
Количество просмотров2.7K
Я думаю многие со мной согласны, что Doctrine — один из самых мощных и удобных ORM для PHP, но с недавнего времени возможностей оного мне перестало хватать. Начнем с того что невозможно использовать ассоциации с условиями фильтрации, «волшебный» поиск с учетом перевода через I18n и много другого.

Всячески экпериментируя с возможностями Doctrine, я написал кучу нужных и ненужных расширений, которые и решил вывести «в мир». Тем самым и начинаю цикл статей, посвященных практическому написанию всяких упрощающих жизнь свистелок. В процессе я также постараюсь раскрыть методологию разработки, так что возможно наличие взаимоисключающих параграфов в течение статьи, но в итоге они разрешатся.

Начну с самого легкого — с расширения для мультиязычности Doctrine_Template_I18n. Оговорюсь сразу, текста будет много, как и много сумбурной технической информации
под катом

Doctrine Behavior на примере собственного плагина

Время на прочтение8 мин
Количество просмотров370
Здравствуй, хабралюд.

Вступление


С выходом symfony 1.4 разработчики фреймворка фактически обязали нас использовать вместо привычного Propel, новую, мною неизведанную ORM Doctrine. Нет, конечно они не заставляют использовать Doctrine, при желании в 1.4 можно подключить и Propel, но как мне показалось — если разработчики такого масштаба сделали Doctrine по–умолчанию в своём фреймворке, то значит это говорит о большей пригодности нежели Propel. Я не стал противиться ещё по той причине, что просто напросто хотелось чего–нибудь нового и стал работать с Doctrine.

В связи с появившейся задачей, с желанием повысить собственную квалификацию и просто из интереса решил попробовать на себе, что такое Doctrine Behaviors, а полученным опытом поделиться с вами. Как писать плагины для symfony framework'a я уже рассказывал, на этот раз хотелось бы рассказать о написании плагина, который использует «Doctrine Behavior».
Читать дальше →

ЧПУ (SEF URLs) в Symfony 3 — автогенерация slug, настройка и маршрутизация

Время на прочтение10 мин
Количество просмотров12K
Всем доброго времени суток!

Третьего дня мне понадобилось провести блиц вебинар на тему ЧПУ в Symfony. Вообще время вебинара у меня ограничено двумя часами, при этом я должен был рассказать еще и про автогенерацию CRUD функционала (scaffolding) в той же Symfony, и про простейший способ создать постраничность. Это создало проблему, так как я знаю как сделать ЧПУ «ручками», не прибегая к автоматизированным под эту задачу инструментам, но рассказ получился бы долгий и оказались бы затянутыми в обсуждение лишние темы. Поэтому я пошел спрашивать у Интернета как сделать все проще. И вот я оказался в той редкой ситуации, когда такая популярная платформа как Symfony не имеет банального обучающего материала на тему «ЧПУ в три клика». Смотрел так же и на английском языке, но там тоже пусто (может плохо искал — время было ограничено). В общем я справился с поиском разрозненного материала по данной теме, а так же со сбором его в единое повествование, так что почему бы не поделиться со всеми?


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

Используем трейты с пользой

Время на прочтение2 мин
Количество просмотров19K
На хабре уже было несколько статей о трейтах и о том, как их использовать. Но я пока не видел примеров использования с реальными фреймворками, на которых мы пишем каждый день. Я любитель Symfony2 стека и потому именно на нем я покажу, как можно использовать трейты с пользой.
Читать дальше →

Doctrine: Опыт работы с миграциями в symfony

Время на прочтение6 мин
Количество просмотров33K
Для тех, кто не в курсе, миграции — это способ внесения изменений в структуру БД.
Управлять изменениями можно по-разному, но все сводится к работе инструкциями для изменения стуктуры.

Почему миграции это делают наилучшим способом:
1. Автоматизация. Вы можете хранить инструкции в sql-файликах, накатывать их при необходимости. Но это становится дико неудобно, когда встает вопрос о переключении между разными ревизиями (версиями БД), для командной разработки, когда всем разработчикам надо накатить изменения, для развертывания тестового окружения.
2. Rollback (как продолжение первого пункта). Мы можем откатить любую миграцию и получить версию БД на любой момент. Чем это удобно, см. ниже.
3. Идентичность DEV и PROD версий БД. Это очень важно, по крайней мере для меня, быть уверенным в том, что версии DEV, PROD и TEST абсолютно одинаковы. Да, этого можно добиться и другими способами. Но когда именно миграции являются носителями информации о структуре БД, вместе с автоматизацией решать эту задачу становится намного удобнее и проще.

Не буду описывать базовые вещи, можно посмотреть:
Далее - опыт, рекомендации, история и грабли при работе с миграциями

PHPUnit. Мокаем Doctrine Entity Manager

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

Во многих современных приложениях для работы с базой данных используется проект Doctrine ORM.


Хорошим тоном считается выносить работу с БД в сервисы. А сервисы нужно тестировать.


Для тестирования сервисов можно подключить тестовую базу данных, а можно замокать Менеджер сущностей и репозитории. С первым вариантом всё понятно, но не всегда есть смысл разворачивать БД для тестирования сервиса. Об этом и поговорим.

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

ORM в PHP быть или не быть?

Время на прочтение1 мин
Количество просмотров14K
Доброго времени суток коллеги.
Как вы относитесь к использованию ORM в PHP проектах?
Я очень люблю ORM и QueryBuilder-ы, но вот конкретная реализацию ORM Doctrine 1, очень разочаровала: неоднозначные фичи, вроде ленивой загрузки поля, очень большой оверхед по памяти и времени работы скрипта, не гибкость, нельзя сохранить один конкретный объект из дерева и еще некоторые вещи. Всё это наводит на мысль отказа от Doctrine, поэтому хотелось бы узнать о практическом опыте сообщества.
UPD если проголосовали за последний пункт, напишите пожалуйста в комментариях, какой фреймворк, какие подводные камни были.

PHP-Дайджест № 157 (20 мая – 3 июня 2019)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: обновления безопасности PHP, коммерческая компания Doctrine, PhpStorm 2019.2 EAP, Symfony 4.3, порция полезных инструментов, видеозаписи, и многое другое.

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

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

Спецификации в PHP

Время на прочтение8 мин
Количество просмотров12K
Happyr Doctrine Specification

Кратко о спецификациях:


Спецификация — это шаблон проектирования, с помощью которого можно отразить правила бизнес-логики в виде цепочки объектов, связанных операциями булевой логики. Спецификации позволяют избавится от повторяющихся, однотипных методов в репозитории и от дублирования бизнес-логики.

На сегодня существует два (если знаете другие проекты, напишите пожалуйста в комментариях) успешных и популярных проекта на PHP, позволяющих описывать бизнес-правила в спецификациях и фильтровать наборы данных. Это RulerZ и Happyr Doctrine Specification. Оба проекта являются мощными инструментами со своими преимуществами и недостатками. Сравнение этих проектов потянет на целую статью. Здесь же я хочу рассказать, что нам привнес новый релиз в Doctrine Specification.

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

Курсоры БД в Doctrine

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

image


Используя курсоры, вы сможете порционно получить из БД и обработать большое количество данных, не расходуя при этом память приложения. Уверен, перед каждым веб-разработчиком хотя бы раз вставала подобная задача, передо мной тоже — и не раз. В этой статье я расскажу, в каких задачах курсоры могут быть полезны, и дам готовый код по работе с ними из PHP + Doctrine на примере PostrgeSQL.

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

Что будет с PHP через 5 лет: мы спросили докладчиков ближайшего московского митапа

Время на прочтение4 мин
Количество просмотров8.1K
Хэллоуин прошел, а страх остался. Страх и ненависть в pcntl_fork(). Боязнь CQRS. И опасения насчет удаленной работы. Если тоже хотите поговорить об этом, встречаемся вечером 21 ноября на Таганке или на этом ютуб-канале (ссылка на эфир появится за 2 дня до ивента).



А пока — есть время познакомиться. Мы попросили докладчиков рассказать про самое страшное событие в их карьерах разработчиков, а также включить нострадамус-mode и дать свой прогноз о развитии языка. У одного докладчика вышла Java. Детали и остальные ответы — под катом.
Читать дальше →