Трудовыебудни

Как в Symfony 3.4 получить из сервис-контейнера свойство объекта и передать его как аргумент через Dependency Injection

Следом ещё одна заметка о Symfony 3.4 и мучениях при работе с его сервис-контейнером. Допустим, есть задача проинтегрировать в приложение библиотеку от стороннего разработчика. Архитектура библиотеки конечно не внушает доверия и просить автора привести её в порядок — бесполезно. Иначе говоря, нужно через Service Container Symfony работать с библиотекой, автор которой нарушил максимальное количество принципов объектно-ориентированного программирования и проектирования. Например, в некой библиотеке имеется один единственный класс через который происходит работа. Однако, в некоторых случаях нужно вызывать методы объекта являющегося свойством «главного» класса, например:

$Object->part->call($args);
(далее…)

Трудовыебудни

Как в Symfony 3.4 назначить DI реализацию для интерфейса

Стандартная задача для многих современных фреймворков поддерживающих концепции Service Container и Dependency Injection — попросить контейнер возвращать по имени интерфейса заданную реализацию этого интерфейса.  Например, в Laravel это делается достаточно понятным методом bind:

$this->app->bind(\Lib\Phone\PhoneClientInterface::class, \Lib\Phone\SmsRegist::class);
Однако, в Symfony всё не так просто. Ещё раз повторюсь что Symfony, пожалуй самый не user-friendly PHP фреймворк текущего времени. Многие вещи интуитивно не понятны и требуют постоянного чтения документации и изучения обсуждений в интернетах. Ещё одна простая задача, которая в Symfony 3.4 сделана абсолютно не интуитивно. (далее…)

Трудовыебудни

Шпаргалка по работе с Git

Подборка команд для работы с системой контроля версий git, которые очень пригодятся в повседневной работе программиста. Большая часть команд подойдёт для работы по методологии git flow или feature branches. Однако, часть команд может противоречить воркфлоу вашей компании. (далее…)

Трудовыебудни

Шпаргалка по работе с Selenium, Webdriver и PhantomJS на PHP

Небольшой список рецептов, ссылок и советов которые будут полезны при работе с Selenium, Webdriver или PhantomJS на PHP.

Webdriver PHP API cheatsheet

Как работать с ожиданием элементов

Работа со вкладками, алертами и фреймами

Так работать с Selenium Webdriver через прокси

(далее…)

Трудовыебудни

Laravel Horizon: выполнение задач с продолжительностью более 60 секунд

Ещё одна откровенная тупость в Laravel Horizon — по-умолчанию все задачи выполняющиеся более 60 секунд просто обрываются без какого-либо уведомления или сообщения об ошибке. И чтобы решить эту проблему, нужно воспользоваться парой недокументированных опций в конфигурационном файле. Ниже расскажу как установить более адекватный таймаут для выполнения задач в Laravel Horizon. (далее…)

Трудовыебудни

Laravel Horizon: ошибка 419 Authentication Timeout

Laravel Horizon — новомодная админка для работы с Redis в качестве системы очередей сообщений. Однако, нельзя просто так взять и начать с ней работать. Одна из частых проблем возникающих после установки: часть данных не подгружается через ajax-запросы, а в консоли разработчика появляются ошибки ответа 419. (далее…)

Трудовыебудни

Как в CentOs (Linux) заархивировать директорию

Работа с архивами — практически ежедневная задача при работе под любой операционной системой. В CentOS и других Linux-системах это создать архив удобнее всего с помощью команды: tar -cvzf folder.tar.gz folder В процессе исполнения будет выводиться лог с обработанными файлами, что весьма удобно для отслеживания процесса архивации. Извлечение файлов можно произвести Read more

Трудовыебудни

Как в PHP получить имя класса без неймспейса

Если вы любите баловаться с наследованием классов, то рано или поздно сталкиваетесь с задачей когда нужно узнать имя класса в контексте которого выполняется тот или иной код. Однако, стандартные методы по типу использования магической константы __CLASS__ или get_class($this) возвращают имя класса с его полным неймспейсом. Т.е. вы хотите получить LockHandler, но получаете Component\Filesystem\LockHandler. Естественно, неокрепшему уму придёт сразу мысль: разбить строку на фрагменты разделённые символом «\» и взять последний фрагмент. Однако, это не самое лучшее решение. Существует ещё одно более простое, быстрое и нативное решение: использование рефлексии! (далее…)

Трудовыебудни

Как на PHP перебрать все комбинации значений нескольких массивов

Достаточно интересная и не самая редкая задача. Допустим, есть несколько массивов с разными значениями, например: массив городов, возрастов, полов и т.п. Нужно вызвать некую функцию передав ей в качестве аргументов все возможные комбинации значений городов + возрастов + полов. Фактически это задача циклической итерации всех значений всех массивов. Неискушённый программист наверняка бы решил эту задачу с помощью вложенных циклов:

foreach($city as $_city) {
    foreach($age as $_age) {
        foreach($gender as $_gender) {
            $response = request($_city, $_age, $_gender);
        }
    }
}
Неплохо. Однако, такое решение не гибкое и максимально грустное. При увеличении количества перебираемых  массивов код будет становиться всё ужаснее, а также будет усложняться его поддержка и отладка. Привожу, возможно не самое красивое и не самое гибкое решение, что называется в лоб. Присылайте в комменты свои варианты либо ссылки на более хорошие, интересные и универсальные решения. (далее…)


Любишь мемасики?

Подпишись на мой телеграм-канал!

Открыть
Закрыть