Symfony для маленьких проектов — помощь или бремя
Йоу, теплокровные. Давненько не писал сюда, ибо было лень, периодически был занят и переделывал старенький сайт на новый лад, о чем сейчас и поведаю.
Маленькое лирическое отступление — теперь на моем бложике халявный вечный ssl от
Вернемся к изначальному повествованию. Сидел я, никого не трогал, и внезапно подумал — а почему бы не отрефакторить один старый сайт и не перенести его на Symfony? Почему именно на этот фреймворк? Да потому что я могу. А еще хотелось составить более-менее объективную оценку того, насколько трудно или легко будет использовать такое решение в маленьких проектах и чем мне это поможет.
Сначала я думал пойти по простому пути — сгенерить сущности с имеющейся базы, после сгенерить для них CRUD, а после этого перенести сгенеренную логику по своим контроллерам и чуток кастомизировать шаблоны. Но так как база была кривая и ненормализованная, идея провалилась. Что поделать, придется делать по другому.
Было решено пойти обычным путем — сделать сущности, маппинг между ними и впихнуть это дело в контроллеры. Ну а из-за того, что бизнес-логики как таковой нет, то все сводилось к чтению из базы. Но несмотря на это я решил вынести контроллеры и репозитории доктрины как сервисы, что оказалось весьма полезно на одном из заключительных этапов.
С учетом требований мне понадобилось подключить немного бандлов чтоб не возиться самому:
- «knplabs/knp-menu-bundle»: «^2.0»
- «symfony/assetic-bundle»:»^2.8″
- «whiteoctober/breadcrumbs-bundle»: «^1.2»
Так же было написано одно расширение для Twig, а под конец консольная команда для генерации карты сайта, где пригодились объявленные как сервисы репозитории, что вполне неплохо ускорит приложение, т.к. не придется дергать контейнер каждый раз.
Теперь немного о проблемах:
Для некоторых, казалось бы простых, действий, приходится писать больше, чем ожидалось.
Пример — можно было бы использовать phpMorphy сразу в нужных местах, но нужно сделать сервис-обертку, в него уже прокинуть нужные зависимости (хотя и не особо это и проблема)
Динамические с*ка формы, документация по которым врет
Задача казалось бы простая — выбираем город и подтягиваем список банков, которые есть в этом городе. И если бы раньше я сделал просто пару ajax-запросов, то с формами для такой мелочи пришлось повозиться.
Пришлось немного повозиться с доктриной. Для мелких вещей лучше взять Propel
Теперь о том, что порадовало:
Да вообще почти все, с учетом того, что половина из того, что мне нужно, было сгенерировано через netbeans. И няшная debug-панель. Порадовала производительность на php7-fpm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
siege -c 100 http://banks-list.com.ru/avangard/city ** SIEGE 3.0.5 ** Preparing 100 concurrent users for battle. The server is now under siege...^C Lifting the server siege... done. Transactions: 3182 hits Availability: 100.00 % Elapsed time: 18.87 secs Data transferred: 14.28 MB Response time: 0.04 secs Transaction rate: 168.63 trans/sec Throughput: 0.76 MB/sec Concurrency: 6.52 Successful transactions: 3182 Failed transactions: 0 Longest transaction: 5.04 Shortest transaction: 0.01 |
И это на сервачке с 1 ядром за 300 рублей в месяц!
Выводы:
Даже для мелких проектов Symfony вполне годен и не излишен. Конечно, придется немного повозиться в некоторых вопросах, но это даст хороший бонус поддерживаемости и масштабируемости, если проект будет расширяться. Так что используя этот фреймворк для нового проекта, Вы скорее всего себе поможете, а заодно узнаете много нового и полезного.
Теги: php symfony
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.