Блог web-разработчика
"Народное программирование" - блог web разработчика, специализирующегося, преимущественно на Symfony framework.
Непрерывная интеграция с Circle CI v2 на примерах code style check в Node.js и PHP
Вторая версия конфигурации для Circle CI перетерпела множество измененений.
В качестве pipe используются так называемые workflow.
Каждый workflow может включать в себя множество шагов (steps).
Пример запуска для Node.js:
Непрерывная интеграция с использованием Travis CI и Behat
Эта заметка начинает цикл заметок о процессах разработки и деплоя приложений. Для начала покажу, как с помощью сервиса Travis CI можно относительно легко реализовать процесс проверки качества и работоспособности кода.
Практику постоянной проверки сборки на наличие дефектов называют Непрерывная интеграция (Continuous Integration).
Вопрос написания тестов в этой статье не будет рассмотрен - это тема другой статьи. Сделано предположение, что у вас уже настроен Behat, и тесты уже могут быть локально запущены с использованием Selenium.
Для начала, проверим, нет ли в коде нарушений установленного код стайла. Это позволит ознакомиться и начать использовать Travis CI. Если у вас нету тестов - настоятельно рекомендую использовать как минимум проверку стиля кода.
Обоснование важности консистентности кода и и его стиля можно найти во множестве мест, например, Стив Макконнелл “Совершенный код” часть 7 раздел 31.
Создание бэкапов данных сервера в dropbox
Недавно столкнулся с задачей созданием бэкапов данных сервера на моей vps. На ней хостятся разные сайты. Мои личные работают под управлением более-менее вменяемых технологий/движков, так что весь код есть в системе контроля версий. Для таких сайтов нужно только резервное копирование базы данных и загружаемых данных. Некоторые сторонние сайты работают на wordpress, так что нужно также сохранять исходники.
Итак, постановка задачи: с некой периодичностью нужно бэкапить базы данных и все содержимое некоторых директорий. Нужно сохранять бэкапы за определенное последнее время для экономии места.
Как в PHP узнать строку, на которой прервалось исполнение
При работе со старым кодом иногда очень сложно найти место, на котором прервалось исполнение. Конструкции типу die, exit и т.д. - очень плохая практика, но много легаси кода (и не только - я ничего плохого не говорю о Wordpress, так что молчу) ими злоупотребляют. Одна из самых больших проблем подобных конструкций - то, что их сложно найти и отладить. (Используйте exception!)
Но когда все же стоит задача найти место, где прерывается исполнение кода, можно воспользоваться следующим сниппетом:
Пересчет индексов Nested Set дерева в Symfony

Аргумент команды - сущность, для которой нужно пересчитать индексы.
Загрузка файлов в Symfony
Загрузка файлов в Symfony идейно ничем не отличается от других php-платформ, но все же имеет свои особенности вследствие наличия дополнительных инструментов, предоставляемых фреймворком.
Вначале стоит отметить, что существуют готовые решения, решающие поставленную задачу. Настоятельно рекомендую ознакомится с ними, и только после этого, если решите, что они вам не подходят, делать свою реализацию.
В этой заметке попытаемся показать возможные пути решения поставленной задачи, как с помощью готовых решений (VichUploaderBundle, IphpFileStoreBundle), так и с помощью собственной реализации (в контроллерах Symfony и админ классах SonataAdminBundle).
Добавление комментариев на сайт
Честно говоря, когда увидел, что по этому поводу пишут и советуют новичкам на других сайтах, немного ужаснулся и решил запилить свою заметку на эту тему без фатального недостатка. В основном я видел длинные полотнища кода, которые реализуют добавление комментариев на сайт. Обычно для этого создают форму, реализуют ее обработку, сохранение, а так же выборки для отображения. Но преимуществ подобного подхода чем дальше, тем все меньше.
В этой заметке вы узнаете один из самый простых (но, субъективно, один из наиболее предпочтительных) способов добавить комментарии на сайт - простой пример для новичков + варианты для более продвинутых веб-мастеров.
Действительно, для чего изобретать велосипед и писать кучу кода, который в будущем еще придется поддерживать, фиксить и т.д., если есть куча готовых решений от сторонних сервисов (речь идет о социальных сетях + disqus)?