Как тестировать приватные сервисы в Symfony.

2 версии Symfony подвержены рассогласованностью между сервисами и тестами. Вы используете Symfony 3.4 или 4.0? Вы хотите тестировать сервисы, но не знаете как получить их правильно? Сегодня мы посмотрим на возможные решения.

Continue reading

Деревья в PHP + Twig 2.0

Предположим, есть задачка, вывести дерево.

Под рукой PHP, а как view — Twig.

Пусть структура данных на backend будет такой:

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

Получится вложенный список из ul и li.

Как определить квартал из даты в PHP

Функции для работы с датой и временем, которые поставляются с PHP прекрасны для форматирования дат, однако отсутствует простой способ определить квартал для timestamp или объекта DateTime.

Вот тут маленькая функция, которая умеет возвращать квартал из DateTime:

Как выбрать только необходимые поля в реляции (связи) Laravel

Иногда требуется выбрать не всю таблицу, а только некоторые поля из связи в контроллере. Сделать это можно так:

 

Человекочитаемый размер файла в PHP

Маленькая функция для преобразования размера  в байтах в человекочитаемый вид:

Использование

Источник

Миграция пользователей на безопасный алгоритм хеширования в Symfony

Ваше приложение может использовать старый, небезопасный алгоритм хеширования для хранения пароля, такой как MD5 (без использования соли)

Эта статья объясняет как преобразовать уже имеющиеся пароли, зашифрованные уязвимым алгоритмом в пароли зашифрованные с использованием безопасного метода хеширования (например с использованием Bcrypt )

Что бы решить проблему, мы сделаем конвертацию на лету, когда пользователь успешно входит в систему. Будем использовать интерфейс  EncoderAwareInterface

login listener и использовать не очень хорошо известные параметры в  security.yml.
Continue reading

ORDER BY RAND() in Doctrine without implement a new Doctrine function

Предположим, что нам нужно выбрать N строк из базы данных и отсортировать их случайным образом. При этом у нас нет возможности (или желания) реализовывать функцию rand() в Doctrine. 

В MySQL эта задача решается очень просто:

Но если вы используете DQL (Doctrine Query Language) это будет не так просто. Следуя документации вы можете реализовать расширение для Doctrine и добавить инструкцию RAND в запросы, но мы не будем этого делать.

Для нашего решения мы будем использовать конструкцию where IN и будем искать что-нибудь (в данном случае ID или другое поле с автоинкриметом, если ваша таблица не содержит первичного ключа с автоинкриментом, вы должны реализовывать RAND расширение для Doctrine) в соответствии с случайными числами полученными при помощи простой функции на php.

В данном примере, таблица имеет поле с автоинкриментом, которое называется id (которая содержит в себе числовые значения), что бы получить случайные записи нам нужно для начала создать функцию, которая возвращает случайные числа в заданном диапазоне (начальное значение, максимальное значение и количество), например, такую как эта:

UniqueRandomNumbersWithinRange выдаст нам числа в заданном диапазоне, эти числа мы будем использовать что бы искать случайные строки в нашей таблице при помощи Doctrine, вот так:

Эта статья является вольным переводом этой

Laravel: Like для коллекций

В коллекциях Laravel 5.1 нет функции like для коллекций, но можно написать подобное поведение при помощи filter.

SQL like preg_match
% .*
_ .

 

PHP Lint

Проверка PHP-кода на ошибки, cli.

«405 method not allowed» IIS for Restful methods

По-умолчанию в IIS запрещены методы, которые используется в Restful API, например DELETE, PUT и другие.

Для того, что бы разрешить эти методы нужно:

  1. В диспетчере IIS открыть Сопоставления обработчиков
  2. Найти обработчик PHP, зайти в его настройки
  3. Ограничение запроса…
  4. Команды
  5. Прописать необходимые методы, например: GET,POST,PUT,DELETE, а также можно разрешить все.