Блог web-разработчика

"Народное программирование" - блог web разработчика, специализирующегося, преимущественно на Symfony framework.

Как в PHP узнать строку, на которой прервалось исполнение

При работе со старым кодом иногда очень сложно найти место, на котором прервалось исполнение. Конструкции типу die, exit и т.д. - очень плохая практика, но много легаси кода (и не только - я ничего плохого не говорю о Wordpress, так что молчу) ими злоупотребляют. Одна из самых больших проблем подобных конструкций - то, что их сложно найти и отладить. (Используйте exception!)

Но когда все же стоит задача найти место, где прерывается исполнение кода, можно воспользоваться следующим сниппетом:

ru en

Пересчет индексов Nested Set дерева в Symfony

TreeОднажды использовал Nestedset behavior в Doctrine, Symfony и столкнулся с тем, что индексы стали неверными. (Прочитать как работает Nested Set можно здесь). Случилось это, скорее всего, во время миграции - по неосторожности был исполнен низкоуровневый MySQL запрос, из-за которого не отработали ивенты Doctrine, которые пересчитывают индексы. Для того, чтобы исправить это, была написана команда, которая пересчитывает индексы. В принципе, при большом желании, можно оформить это в виде отдельного сервиса, и запустить с помощью следующей миграции. Здесь показан просто рабочий пример, как пересчитать индексы.

 

Аргумент команды - сущность, для которой нужно пересчитать индексы.

Загрузка файлов в Symfony

Загрузка файлов в Symfony идейно ничем не отличается от других php-платформ, но все же имеет свои особенности вследствие наличия дополнительных инструментов, предоставляемых фреймворком.

Вначале стоит отметить, что существуют готовые решения, решающие поставленную задачу. Настоятельно рекомендую ознакомится с ними, и только после этого, если решите, что они вам не подходят, делать свою реализацию.

В этой заметке попытаемся показать возможные пути решения поставленной задачи, как с помощью готовых решений (VichUploaderBundle, IphpFileStoreBundle), так и с помощью собственной реализации (в контроллерах Symfony и админ классах SonataAdminBundle).

Добавление комментариев на сайт

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

В этой заметке вы узнаете один из самый простых (но, субъективно, один из наиболее предпочтительных) способов добавить комментарии на сайт - простой пример для новичков + варианты для более продвинутых веб-мастеров.

Действительно, для чего изобретать велосипед и писать кучу кода, который в будущем еще придется поддерживать, фиксить и т.д., если есть куча готовых решений от сторонних сервисов (речь идет о социальных сетях + disqus)?

Value Object'ы у Symfony формах

DecompositionSymfony разработчики часто задаются вопросом, как заставить Symfony формы работать с value-object'ами. Давайте, для примера, представим тип Money как объект с двумя полями $amount и $currency:

class Money
{
    private $amount;
    private $currency;

    public function __construct($amount, $currency)
    {
        $this->amount = $amount;
        $this->currency = $currency;
    }

    public function getAmount() // ...
    public function getCurrency() // ...
}

Можете ли вы создать form type для этого класса без методов setAmount() и setCurrency()? В этой заметке вы научитесь этому.

Версионность ассетов при использовании gulp

assetsПри изменении клиентского кода нужно как-то заставить браузер клиента перезагрузить измененные файлы. Эта проблема достаточно распространенная. Скорее всего, вы столкнетесь с ней вне зависимости от того, какими технологиями пользуетесь при веб-разработке. Этот пример о решении проблемы при создании фронтенд проекта с использованием javascript и gulp.

Решить можно несколькими способами.

Пусть, например, 7e50961489 - это новая версия ассетов. На самом деле, она может быть любой, главное, чтобы отличалась от тех, что были раньше. Можно просто нумеровать - 1, 2, 3 и т.д. Но так не слишком удобно. Дальше станет понятно, почему.

Sequence Master Game

Sequence Master Game - игра для проверки скорости реакции. Кликайте по наибольшем среди доступных чисел (можно выбирать несколько чисел на каждом шаге) и делитесь рекордом с друзьями.

Ключевые особенности/геймплей:

1) Доступно 7 уровней

2) За отведенное время вы должны успеть прокликать числа от наибольшего до наименьшего.

3) За каждый выбор начисляются очки. Их количество зависит от скорости выбора игрока и величины выбранного числа. В случае ошибки игра не прекращается, но начисляется штраф.

4) Игра прекращается, если не успеть выбрать правильное число за отведенное время. После окончания игры есть возможность расшарить результат.

5) Респонсивность (должно работать на смартфонах), анимация и прочие свистелки =).

Поиграть можно перейдя по ссылке: https://rg.folkprog.net