YII2 выполнение кода в каждом контроллере

В продолжении темы примитивного логгирования. Понадобилось записывать, какой пользователь открывает какие страницы. И если с клиентским отображением в принципе ничего сложного, просто вставил в /view/layouts/main.php код вида:

Но, к сожалению оный не перехватывает вызов страниц, которые завершаются в контроллере. Ну например всякие ajax запросы на странице. Поступил чуть хитрее: создал свой компонент в папке components (требуется создать папку если нет):

И добавил/отредактировал в /config/web строчки:

Плюс добавил сохранение сессии в константу sess в web/index.php

Итого, в логах теперь красуется всё то нужно:

Примитивное логгирование в YII2

Иногда необходимо в проект добавить логгирование событий работы, однако не всегда удобно тащить для этого кучу сторонних библиотек. Тем более что особых требований и не нужно. Если достаточно что бы:

  • логи велись «стандартно» для системы на базе Linux, с автоматической ротацией и т.п.
  • особых тонкостей и настроек для вывода не нужно, достаточно просто текста

То вполне можно написать свою простенькую модель вида:

И использовать её далее в любом месте в коде, например так:

Логи можно будет наблюдать в стандартном /var/log/messages:P.S. Раньше тоже велосипедил с добавлением лога в отдельный файл, а потом подумал «А зачем?». В большинстве случаев достаточно так.

Разработка бота в мессенджере MAX. Часть 1

Во всех мануалах пишут что бота нужно создавать в боте MasterBot, однако у меня он усиленно пишет что «Сейчас создать бота не получится. Попробуйте позже». Удалось создать только в консоли разработчика из https://business.max.ru/self/#/services, для этого нужно подтвердить организацию при помощи ЭЦП ключа. Простым физическим лицам, похоже пока бота не создать.

Документация по разработке бота тут: https://dev.max.ru/docs-api/ , увы не очень удобная. Как делать некоторые вещи я сделать долго путался, а некоторые так и не удалось, пришлось копаться в исходниках их официального клиента API на Python.

Итак, для начала создал класс для работы с мессенджером, который берет на себя всю рутину:

Далее необходимо зарегистрировать вебхук, куда платформа будет посылать обновления по по событиям:

Получить информацию о боте можно так:

Установить команды бота:

Причем установить то я команды установил, но в самом боте в мессенджере они так и не отображаются. Почем? Пока не выяснено.

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

Получение GPS координат почтовых отделений по индексу

Задача: получить по известному индексу почтового отделения, его адрес, GPS координаты и другие данные..

Решение: а просто попарсим страницу почты россии: https://www.pochta.ru/offices, где есть возможность ввода индекса, а в ответ на карте отрисовываються отделения. Чуть нырнув в сетевые запросы, получаем вызов:

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

Особенности работы с DOMDocument в php 7 и 8

Разрабатывал давече один скрипт по работе с XML, на рабочем ПК, установленным php 8.2, и был весьма удивлён, что код вида:

Отлично работает на PHP 8 и не работает на PHP 7. , ругаясь на

Странно подумал я, почесав затылок. Пришлось переписать код на вида:

И нигде ведь не попадалось в документации по работе с PHP, что совместимость с php7 сломана. Хотя может плохо смотрел..

1 2 3 29