
4.3
Рейтинг
Symfony *
Свободный фреймворк, написанный на PHP5
Сначала показывать
Порог рейтинга
Уровень сложности
+9
+15
Обновление PHP до 7.0.6 может «сломать» ваш код
2 мин
19KВнимание! Будьте осторожны при обновлении PHP до версии 7.0.6! В этой версии был исправлено несколько важных багов, на которые мог неявно полагаться ваш код или код вашего фреймворка.


+17
Symfony: обработка запросов в API
2 мин
11KТуториал

Я думаю, для многих не секрет, что компонент Form плохо подходит для работы в API,
каждый изобретает свой велосипед на замену, одним из таких велосипедов я решил поделиться. На звание “лучшего решения” я не претендую, но если мое решение кому-нибудь окажется полезно, либо я получу новые знания – будет очень здорово.
+3
Фильтрация данных в Symfony
2 мин
12KВсем любителям Symfony известно что в ней нету компонента фильтр.
Есть замечательные и удобные Constraints и даже была попытка создать на подобии их фильтры issue на Github, но никто так и не взялся это сделать.
Когда я в очередной раз столкнулся с задачей фильтрации большого количества данных, полученных от пользователя, я понял что пора решить задачу фильтрации как то более глобально/красиво/удобно.
+9
SonataAdminBundle: создание объекта из List View (часть 2)
4 мин
6.7KПостановка задачи
В первой части статьи мы создали кнопку в строке List View писем, которая переводит нас на форму создания ответа. Однако остались нерешенными по крайней мере два важных вопроса:
- автоматическая привязка ответа к письму
- проверка прав пользователя на создание ответа
+4
Symfony и Command Bus
16 мин
45KУже больше года использую паттерн Command Bus в своих Symfony-проектах и наконец решил поделиться опытом. В концев концов обидно, что в Laravel это есть «из коробки», а в Symfony, из которого Laravel во многом вырос — нет, хотя самому понятию Command/Query Separation уже не менее 10 лет. И если с буквой «Q» из аббревиатуры «CQRS» еще понятно что делать (лично меня вполне устраивают custom repositories), то куда приткнуть букву «C» — неясно.
На самом деле, даже в банальных CRUD-приложениях Command Bus дает очевидные преимущества:

На самом деле, даже в банальных CRUD-приложениях Command Bus дает очевидные преимущества:
- контроллеры становятся «худыми» (редкий «экшен» занимает более 15 строк),
- бизнес-логика покидает контроллеры и становится максимально независимой от фреймворка (в результате ее несложно повторно использовать в других проектах, даже если они написаны не на Symfony),
- упрощается unit-тестирование бизнес-логики,
- сокращается дублирование кода (когда, например, необходимо реализовать «фичу» как через Web UI, так и через API).

+11
Мультиисключение или Хочу поделиться одним интересным архитектурным приемом
6 мин
15KМне никогда не нравилась в фреймворках на PHP работа с ошибками. И даже употребление этого слова не нравилось. Чтобы сразу уточнить — я не про фатальные ошибки, не про error_reporting, я про то, что называют ошибками валидации. То в моделях, то в формах — это уж от фреймворка зависит.
Вы только гляньте. Вот например Yii и Yii2, получение ошибок валидации модели:
Symfony, ошибки формы:
Активно рекламирующийся Pixie (давненько про него ничего не было):
Что тут не так?
Да всё. Всё не так. Весь этот код очень дурно пахнет, он пахнет временами PHP4, спагетти-архитектурой и диким смешением понятий.
Что же делать?
Вы только гляньте. Вот например Yii и Yii2, получение ошибок валидации модели:
$errors = $model->getErrors();
Symfony, ошибки формы:
$errors = $form->getErrors();
Активно рекламирующийся Pixie (давненько про него ничего не было):
$result = $validator->validate($data);
$errors = $result->errors();
Что тут не так?
Да всё. Всё не так. Весь этот код очень дурно пахнет, он пахнет временами PHP4, спагетти-архитектурой и диким смешением понятий.
Что же делать?
+3
Как подружить JMS Serializer и LiipImagineBundle
2 мин
4.1KЯ сейчас занимаюсь написанием API для front-end на AngularJS. Для этого я использую стандартную связку для Symfony:
У меня появилась задача отдавать ссылки на thumb и preview в объектах которые содержат картинки. Я уже использовал в коде LiipImagineBundle и для генерации ссылок в api тоже хотел использовать данный bundle. Проведя некий поиск нужного мне решения я удивился что нет никаких готовых bundlов для этого.
У меня появилась задача отдавать ссылки на thumb и preview в объектах которые содержат картинки. Я уже использовал в коде LiipImagineBundle и для генерации ссылок в api тоже хотел использовать данный bundle. Проведя некий поиск нужного мне решения я удивился что нет никаких готовых bundlов для этого.
+5
SonataAdminBundle: создание объекта из List View (часть 1)
5 мин
6.1KПостановка задачи
Имеется набор некоторых объектов, например, входящих писем, связанных связью один-к-одному (для целей данной статьи вид связи значения не имеет) с объектами из другого набора, например, ответами на письма. Для управления сущностями используется SonataAdminBundle (т.е. для каждой сущности определен Admin-класс). Необходимо создавать новые ответы непосредственно из списка (List View) писем.
+4
Как Облако@mail.ru спасло все* мои файлы и что из этого вышло
10 мин
117K
Однажды я увидел этот баннер и решил, что бесплатный терабайт мне совсем не помешает, тем более, что мой архив фотографий и документов как раз лежал на терабайтном винчестере. Признаюсь, я очень опасался ставить на компьютер программу с логотипом mail.ru, но стремление к халяве пересилило. Я зарегистрировался, получил место, установил клиент, настроил его и забыл.
А несколько месяцев назад произошло неизбежное — мой жёсткий диск с архивом приказал долго жить. К счастью, к тому времени все файлы были скопированы в облако и ничего не потерялось.
+64
Symfony как использовать FOSRestBundle
6 мин
34KRecovery Mode
В данном посте я бы хотел рассказать о том, как нужно правильно выстраивать RESTfull API для AngularJS и других фронтенд фреймворков с бекендом на Symfony.
И, как вы уже наверное догадались, я буду использовать FOSRestBundle — замечательный bundle, который и поможет нам реализовать backend.
Здесь не будет примеров как работать именно с Ангуляром, я буду описывать исключительно только работу с Symfony FosRestBundle.
Для работы нам так же понадобится JMSSerializerBundle для сериализации данных из Entity в JSON или другие форматы, исключения некоторых полей для той или иной сущности (например пароль для API метода получения списка пользователей) и многое другое.
Подробнее можете почитать в документации.
И, как вы уже наверное догадались, я буду использовать FOSRestBundle — замечательный bundle, который и поможет нам реализовать backend.
Здесь не будет примеров как работать именно с Ангуляром, я буду описывать исключительно только работу с Symfony FosRestBundle.
Для работы нам так же понадобится JMSSerializerBundle для сериализации данных из Entity в JSON или другие форматы, исключения некоторых полей для той или иной сущности (например пароль для API метода получения списка пользователей) и многое другое.
Подробнее можете почитать в документации.
+8
Ближайшие события
Инициализируемые контроллеры в Symfony и работа с аннотациями
5 мин
7.5KДавным давно передо мной встала задача реализовать механизм инициализации контроллеров в Symfony, т.е. выполнение неких дефолтных действий перед каждым вызовом экшна контроллера. Первое, что пришло на ум, — это добавить EventListener для события kernel.controller, в котором будет вызываться метод контроллера initialize, если он есть. Данным способом я пользуюсь уже на протяжении нескольких лет.
Буквально на днях я задумался: а что если необходимо перед экшном выполнить разные методы для разных контроллеров, несколько методов подряд, а некоторые из них даже несколько раз и с разными параметрами? В данной статье я хочу рассказать, как я решил эту проблему с помощью аннотаций. Думаю, эта статья будет полезна в том числе и тем, кто никогда не работал с аннотациями.
Буквально на днях я задумался: а что если необходимо перед экшном выполнить разные методы для разных контроллеров, несколько методов подряд, а некоторые из них даже несколько раз и с разными параметрами? В данной статье я хочу рассказать, как я решил эту проблему с помощью аннотаций. Думаю, эта статья будет полезна в том числе и тем, кто никогда не работал с аннотациями.
+7
Symfony2 перехватчик исключений с помощью сервисов или как избежать использования Event Listener
2 мин
8KСегодня я хочу поделиться своим скромным опытом и показать, как можно сделать перехватчик исключений, не используя Event Listener. Но сначала пару слов о том, зачем это нужно.
Я считаю, что использование Event Listener'ов в обычном приложении делает код запутанным, к тому же многие неопытные разработчики злоупотребляют данным подходом (сам так делал). А вот использование сервисов делает код понятным, так как они вызываются в том месте, в котором объявлены. И как вы уже поняли, далее речь пойдет именно о сервисах.
Итак, начнем.
Я считаю, что использование Event Listener'ов в обычном приложении делает код запутанным, к тому же многие неопытные разработчики злоупотребляют данным подходом (сам так делал). А вот использование сервисов делает код понятным, так как они вызываются в том месте, в котором объявлены. И как вы уже поняли, далее речь пойдет именно о сервисах.
Итак, начнем.
+10
Форсаж под нагрузкой на Symfony + HHVM + MongoDB + CouchDB + Varnish
6 мин
13K
Сегодня хотим рассказать о том, как строили систему, к которой сейчас обращается более 1 млн. уникальных посетителей в день (без учёта запросов к API), о тонкостях архитектуры, а также о тех граблях и подводных камнях, с которыми пришлось столкнуться. Поехали…
+4
Symfony2 Voters и Doctrine Filters на страже безопасности
6 мин
15KВсе началось, когда я настраивал систему безопасности одной CRM. Как это часто бывает, в ней были пользователи с разными уровнями доступа к основным данным (назовем их entities). Вид основного грида у них был одинаковый, необходима была гибкость настроек доступа к entities. Сперва я подумал об ACL, но…
+9
Внедряем Bootstrap 3 Datepicker в SonataAdminBundle
8 мин
19KВ этой маленькой заметке я расскажу о том, как подключить удобный datepicker в админку Symfony. По умолчанию datepicker в SonataAdminBundle выглядит так:

А мы его превратим в удобные и красивые контролы:

Те, кто еще мучаются с неудобным datepicker-ом, добро пожаловать под кат.
Если вам не нужен выбор времени, то вы может воспользоваться готовым решением, спасибо dmkuznetsov

А мы его превратим в удобные и красивые контролы:

Те, кто еще мучаются с неудобным datepicker-ом, добро пожаловать под кат.
Если вам не нужен выбор времени, то вы может воспользоваться готовым решением, спасибо dmkuznetsov
+6
Symfony2 двухфакторная авторизация с помощью сертификата
3 мин
8.1KRecovery Mode
Речь пойдет о Symfony2-CertAuthBundle — бандле для популярного фрейморка Symfony2, который позволяет легко внедрить двухфакторную аутентификацию на основе x509 сертификатов клиентов.
Иногда стандартной аутентификации в виде формы логина недостаточно чтобы надежно защитить проект.
Кто-то может подсмотреть, проснифить, любым другим способом выудить логин пароль, ну или просто взломать сайт и получить доступ ко всем учеткам.
Для тех, кто считает, что его проекту нужен более надежный метод защиты добро пожаловать под кат.
Иногда стандартной аутентификации в виде формы логина недостаточно чтобы надежно защитить проект.
Кто-то может подсмотреть, проснифить, любым другим способом выудить логин пароль, ну или просто взломать сайт и получить доступ ко всем учеткам.
Для тех, кто считает, что его проекту нужен более надежный метод защиты добро пожаловать под кат.
+8
Api-platform
3 мин
25KТуториал

С приближением Web 3.0 все активнее начинают использоваться подходы API first и Linked Data (или что-то вроде Sematic Web). В связи с этим читателям предлагается познакомиться с фреймворком для удобного создания API на базе схем собранных на schema.org с генерацией ответов в виде JSON-LD,
Это укороченная версия туториала Api-platform
+13
Вклад авторов
pronskiy 4929.0spasibo_kep 263.2varanio 254.0AlexLeonov 249.0olegsklyarov 165.0icegreenberry 133.0Cutcode 119.8vsh797 99.0nProfessor 92.0frantic 89.0