Обновить
2.33

Symfony *

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

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

Серия #notNULL — Twig

Время на прочтение2 мин
Охват и читатели4.7K
Приветствую, Хабрасообщество!

Давно я забросил переводы тех. литературы по Objective-C / Swift и несколько непереведённых глав из Core Data остались далеко в черновиках. Однако любовь к переводам, разработке и обучению не угасла — изменился подход и мысли о том, как можно всё это упаковывать и организовывать.

Я влюбился в формат обучающих видео.

Малюсенький CI вашего Symfony проекта за 2 минуты

Время на прочтение2 мин
Охват и читатели11K
Без воды о том, как за 10 минут сделать:

  1. Проверяем ваш composer.json на серьезные и несерьезные ошибки, вроде неоптимального autoload
  2. Проверяем ваш composer.lock на security уязвимости в пакетах
  3. Проверяем вашу базу данных, что ничего не забыли
  4. Проверяем ваши YAML файлы
  5. Проверяем Coding Style по Symfony
Читать дальше →

Symfony Flex Private Recipes: создание, настройка и использование

Время на прочтение3 мин
Охват и читатели9.8K
Привет, Хабр.

Предлагаю Вашему вниманию краткую статью-инструкцию по созданию, настройке и использованию личных рецептов (private recipes). Для этого нам понадобится: проект, репозиторий с бандлом, репозиторий с нашими рецептами.

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

Бандл: symfony-acme-bundle
Рецепты: symfony-recipes
Читать дальше →

Будущий релиз Symfony 4.0 и проект с использованием Symfony Flex

Время на прочтение3 мин
Охват и читатели9K

30 Ноября 2017 года состоится релиз Symfony 4.0



image

Четвертая версия имеет ряд глобальных изменений, основным из которых можно назвать переход на Symfony Flex.

Что же такое Symfony Flex?


Это новый подход к организации приложений на симфони, основаный на «рецептах».
Как заявляют разработчики — это должно упросить работу с зависимостями\бандлами\пакетами и привнести больше автоматизации.
Читать дальше →

SensioLabs закрыла множественные уязвимости во всех поддерживаемых версиях Symfony

Время на прочтение2 мин
Охват и читатели5.4K
В частности, сообщается, что уязвимы следующие версии: 2.7.0 — 2.7.37, 2.8.0 — 2.8.30, 3.2.0 -3.2.13, и 3.3.0 — 3.3.12. Интересный факт: в остальных версиях эти уязвимости также могут присутствовать, но исправлений для них нет (по причине того что исправления есть только в поддерживаемых версиях).

Для исправления уязвимостей необходимо обновиться до версий 2.7.38, 2.8.31, 3.2.14, 3.3.13, 3.4-BETA5, или 4.0-BETA5.



И немного подробнее о самих уязвимостях:
Читать дальше →

Использование событийной модели в Doctrine 2 + Symfony 3

Время на прочтение6 мин
Охват и читатели23K

Давайте представим ситуацию: у вас есть заказ в интернет магазине (Entity). Заказ имеет некий статус. При смене статуса заказа необходимо провести кучу сопутствующих действий, например:


  • сохранить в заказе дату последнего изменения
  • записать в историю по заказу информацию о смене статуса
  • отослать письмо / sms клиенту
  • вызвать метод API службы доставки / платежной системы / партнера и т.д.

Возникает вопрос как все это правильно организовать с точки зрения программного кода.
Все ниже описанное справедливо для Doctrine 2 и Symfony > 3.1

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

Sonata Import Bundle

Время на прочтение5 мин
Охват и читатели5.3K
До сих пор одной из самых лучших админ панелей для Symfony является SonataAdminBundle, и не зря. Простая установка, конфигурация, множество фич “из коробки” и большое сообщество.

Единственное, что в ней отсутствует, так это импорт файлов. Согласитесь, немаловажная функция.

В сети лежит множество реализаций импорта для Sonata, но везде есть небольшие недочеты — возможность импорта только текстовых полей, а не сущностей, не работает с коллекциями, проблематично грузить огромные базы, которые могут обрабатываться не один час…

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

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

Symfony + RabbitMQ Быстрый старт для молодых

Время на прочтение9 мин
Охват и читатели64K
Всем доброго времени суток, друзья.

Сегодня захотелось поговорить о том, как можно работать с RabbitMQ в Symfony и совсем чуть-чуть о некоторых подводных комнях. В конце я напишу парочку интересных моментов о кролике (рус. перевод «rabbit») для тех, кто совсем в танке.

Я не буду рассказывать про сам RabbitMQ, поэтому если вы пока и этого не знаете, почитайте следующие переводы:

Статья 1
Статья 2
Статья 3
Статья 4
Статья 5

Не бойтесь примеров на перле или пайтоне — это не страшно, все достаточно понятно из исходного кода.

+ Все достаточно подробно описано, когда я читал это в свое время, достаточно было интерпретировать код мысленно, чтобы понять как что и зачем.

Если вы уже знаете, что такое консумер и почему в нем нужно делать $em->clear() + gc_collect_cycles, а после закрывать соединение с базой данных, то, скорее всего, вы ничего нового для себя не узнаете. Статья скорее для тех, кто не хочет разбираться с AMQP протоколом, но которым нужно прямо сейчас применять очереди и выбор почему-то бездумно пал на RabbitMQ, а не тот же легковесный beanstalkd.

Если же у вас микросервисная архитектура и вы ждете, что я расскажу вам как сварить коммуникацию между компонентами через AMQP, как красиво делать RPC, то я сам чего-то подобного очень давно жду на Хабре…
Читать дальше →

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

Время на прочтение19 мин
Охват и читатели61K

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

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

Непрерывная интеграция/внедрение приложения Symfony с помощью docker-compose и GitLab CI

Время на прочтение16 мин
Охват и читатели35K

В статье я поделюсь своим опытом автоматизации всего процесса разработки приложения Symfony с нуля от настройки инфраструктуры до деплоя в production. От development- и до production-окружения для запуска приложения будет использоваться docker-compose, а все процедуры непрерывной интеграции/внедрения будут запускаться через GitLab CI/CD Pipelines в docker-контейнерах.


Подразумевается, что вы знакомы с docker и docker-compose. Если нет или вы не знаете как его установить, я подготовил инструкцию по подготовке локального окружения разработчика. Фактически, для работы над приложением потребуется только Docker, VirtualBox и, опционально, Yarn.

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

Джентльменский набор Doctrine 2 для Symfony 3.3.6: Создание сущности, ассоциации и рекурсивные связи

Время на прочтение15 мин
Охват и читатели20K


Доброго дня, читатель!

Что мы будем делать с вами по ходу чтения статьи


  • Создадим простые сущности
  • Немного поговорим об ORM аннотациях
  • Реализуем ассоциации:
    1. Двунаправленные связи Один к Одному
    2. Двунаправленные связи Один ко Многим
    3. Двунаправленные связи Многие ко Многим
    4. Рекурсивные связи

  • Поиграемся этими сущностями с помощью фикстур

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

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

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

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

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

Superjob PHP-meetup. Прямая трансляция

Время на прочтение3 мин
Охват и читатели5.9K
Сегодня в 18:30 по московскому времени в офисе Superjob состоится встреча PHP-разработчиков. Присоединяйтесь к прямой трансляции!



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

Superjob PHP-meetup

Время на прочтение3 мин
Охват и читатели4.8K
Superjob приглашает на PHP-meetup. Встречаемся 20 июля в нашем офисе на Малой Дмитровке.

Это мероприятие мы посвятим разработке на PHP, увеличению производительности и разработке API.

image

Спикеры:

Антон Довгаль, Senior C Developer Badoo, с докладом «Как мы разрабатываем модули в Badoo»

Документация на тему архитектуры языка PHP скудна и разрозненна, несмотря на то что тема интересна многим. В моем докладе я постараюсь заполнить этот пробел и рассказать о модулях PHP: как они работают, зачем и как их пишут. В процессе мы рассмотрим опыт Badoo в этой сфере на примерах двух модулей. И еще напишем очень небольшой собственный модуль.
Читать дальше →

Symfony: Webpack Encore — плагин для управления ресурсами

Время на прочтение6 мин
Охват и читатели20K
Позавчера обнаружил новость о том, что команда Symfony выпустила плагин Webpack Encore для интеграции замечательного инструмента Webpack в ваше приложение. Если вы не знакомы с Webpack, то я настоятельно рекомендую ознакомиться с ним, так как он возможно решит множество вопросов связанных с управлением ресурсами в вашем проекте. В любом случае даже если вы не собираетесь его использовать, знать о том что он существует будет крайне полезным. Очень хорошо этот инструмент описан тут.
Читать дальше →

Symfony 4: Тестируем плагин Symfony Flex

Время на прочтение5 мин
Охват и читатели19K
Несколько месяцев назад вышла альфа версия Composer плагина Symfony Flex. С выпуском Symfony 3.3 стало возможным протестировать работу данного плагина и «попробовать на вкус» подход к построению приложений на Symfony 4. Что мы сейчас и попробуем сделать.
Читать дальше →

Symfony 4: структура приложения

Время на прочтение5 мин
Охват и читатели37K
Данный пост написан на основе публикации Фабьена Потенсье.

В свое время в Symfony 3 появились каталоги bin/, src/, var/, что по-моему мнению очень удобно и понятно. Мы все привыкли работать с такими каталогами. В свою очередь, Symfony 4 движется в этом же направлении и предлагает обновленную структуру каталогов приложения.
Читать дальше →

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

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

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


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

Готовимся к собеседованию по PHP: Всё, что вы хотели узнать об интерфейсах, совместимости сигнатур и не побоялись узнать

Время на прочтение6 мин
Охват и читатели118K
imageИнтерфейсы, впервые появившись в PHP 5, давно уже заняли прочное место в объектно-ориентированной (или всё-таки правильнее «класс-ориентированной»?) части языка.

Казалось бы — что может быть проще интерфейса? "Как бы класс, но и не класс, нельзя создать экземпляр, скорее контракт для будущих классов, содержит в себе заголовки публичных методов" — не правда ли, именно такими словами вы чаще всего отвечаете на собеседовании на дежурный вопрос о том, что такое интерфейс?

Однако не всё так просто, как может показаться начинающему программисту на PHP. Привычные аналогии не работают, руководство по языку вводит вас в заблуждение, в коде таятся неожиданные «подводные камни»…

Три предыдущие части:

Проверьте себя: всё ли вы знаете об интерфейсах в PHP?

«Runn Me!» — говорит нам очередной фреймворк* на PHP. А слышится «Throw Me!». Часть 2

Время на прочтение6 мин
Охват и читатели7.2K
* вообще говоря это пока еще не фреймворк, а просто набор библиотек, фреймворком он станет чуть позже


Не прошло и недели с момента «безумного успеха» (тут мнения немного расходятся, конечно...) первой части нашего повествования, как пришло время выпустить вторую.

Сегодня мы продолжаем путешествие в бездонную глубину библиотеки runn/core будущего фреймворка «Runn Me!». Под катом нам встретятся следующие обитатели бездны:

  • Концепция «мультиисключения» и ее реализация в библиотеке
  • Понятие объекта с внутренней валидацией и эталонная реализация такого объекта
  • Немного заглянем в мир валидаторов и санитайзеров (подробный рассказ о них будет позже)
  • Рассмотрим реализацию объекта с обязательными полями

Вперед!