Laravel Livewire — сетевая игра (часть 5)

В этом выпуске обдумаем стратегию аутентификации и поработаем над ссетевой игрой между двумя реальными игроками (раньше играть можно было только против компьютера), добавим режим наблюдателя, потренируемся в отладке с помощью Xdebug и используем функциональность lazy и poll в Livewire. Исходный код проекта: https://github.com/pqr/laravel-livewire-rock-paper-scissors Плейлист со всеми сериями: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq Источник: 5minphp.ru  

Чудо Mockery для заглушек в unit тестах

Потрясающая библиотека Mockery, которая сделает вашу жизнь лучше во время написания тестов. Она помогает создавать быстрее и проще стабы и моки и так же используется в большинстве тестовых фрейморков. И что самое приятное, библиотека очень простая. Его основная цель состоит в том, чтобы предложить тестовую двойную инфраструктуру с лаконичным API, способным четко определять все возможные …

ПодробнееЧудо Mockery для заглушек в unit тестах

Laravel Livewire — SPA & Turbolinks (часть 4)

Продолжаем работу над игрой «Камень, ножницы, бумага». В этом эпизоде добавим игровое лобби, таким образом приложение будет состоять из двух экранов: лобби и непосредсвенно игра. Обработку роутов приложения сделаем с помощью Livewire, такм образом переходы между экранами будут осуществляться в без перезагрузки страницы в стиле Signle Page Application. Также научимся сохранять состояние игры в базу …

ПодробнееLaravel Livewire — SPA & Turbolinks (часть 4)

Как показать весь объект через var_dump

Обложка к записи Как показать весь объект через var_dump

При активации расширения Xdebug в PHP он замеяет вывод встроенной функции var_dump на свой, при этом показывает не полный объект/массив, урезая уровень вложенности. Чтобы заставить var_dump показывать полный объект с нужной нам (или бесконечной) вложенностью, достаточно в конфиге php.ini в директиве [xdebug] прописать следующие настройки: ; в разумных пределах xdebug.var_display_max_depth = 10 xdebug.var_display_max_children = 256 …

ПодробнееКак показать весь объект через var_dump

Модульное тестирование WordPress с помощью Brain Monkey

Кто еще не знаком с тестированием и модульным тестированием можете ознакомится: Автоматизация тестирования, Модульное тестирование с помощью PHPUnit. Тестирование тем и плагинов под WordPress имеет одну большую проблему — взаимодействие с ядром. Решить ее можно с помощью библиотек Brain-WP/BrainMonkey или 10up/WP_Mock. Как писать тесты с помощью 10up/WP_Mock вы можете прочитать в статье: Модульное тестирование WordPress (PHPUnit, WP_Mock), но …

ПодробнееМодульное тестирование WordPress с помощью Brain Monkey

Не за#буйте с вашей пагинацией!!!

Почему не работает пагинация? Один из самых популярных вопрос у разработчиков WordPress Так почему же? Для начала нужно разобраться с тем, на какой странице вы хотите вывести пагинацию. Существуют страницы постов (постов/страниц/кастомных типов постов(CPT)) или архивные страницы(архивные/терминов страницы и страница поиска). Пагинация на странице постов В целом пагинацию можно разбить на 3 небольших этапа: Делаем …

ПодробнееНе за#буйте с вашей пагинацией!!!

Как с помощью husky улучшить качество работы с Git?

Библиотека husky может предотвращать плохие git commit, git push и еще что-то) Установка husky npm install husky —save-dev В package.json добавим секцию scripts в которой создадим команду для проверки WPCS: { … «scripts»: { «cs»: «vendor/bin/phpcs —standard=WordPress .» }, … } Добавим саму библиотеку WPCS: composer require —dev wp-coding-standards/wpcs Добавим секцию husky в package.json: { … …

ПодробнееКак с помощью husky улучшить качество работы с Git?

Подмена встроенных php-функций

Часто при написании тестов необходимо протестировать внешнюю функцию или функцию, которая встроенная в php. Рассмотрим для примера сохранение метаполей для постов в WordPress: class Metabox { public function save( int $post_id ) { $nonce = filter_input( INPUT_POST, ‘_nonce’, FILTER_SANITIZE_STRING ); if ( ! wp_verify_nonce( $nonce, ‘very-secret-nonce’ ) ) { return; } $field = filter_input( INPUT_POST, …

ПодробнееПодмена встроенных php-функций

Тестирование абстрактных методов

Объект абстрактного класса мы не можем создать напрямую. Поэтому работать с ним будем через stub. Что такое stub можно прочитать в статье про Модульное тестирование. Пример абстрактного класса Abstract_Suit: abstract class Abstract_Suit { abstract public function abstract_method(); } Тестируем с помощью метода getMockForAbstractClass use PHPUnitFrameworkTestCase; class Test_Suit extends TestCase { public function test_abstract_class() { $stub …

ПодробнееТестирование абстрактных методов

Laravel Schematics — проектируем базу данных (часть 3)

Продолжаем работу над игрой «Камень, ножницы, бумага». В этом эпизоде займёмся проектированием структуры базы данных и мделаем это с помощью утилиты Laravel Schematics. Исходный код проекта: https://github.com/pqr/laravel-livewire-rock-paper-scissors Плейлист со всеми сериями: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq Источник: 5minphp.ru  

Laravel Livewire — Исправляем уязвимости (часть 2)

Продолжаем работу над игрой «Камень, ножницы, бумага» с использованием Laravel Livewire. В этом эпизоде исправим дыру в безопасности и обсудим, на что стоит обращать внимание при работе с Livewire, чтобы не отдать лишние данные на клиент? Исходный код проекта: https://github.com/pqr/laravel-livewire-rock-paper-scissors Плейлист со всеми сериями: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq Источник: 5minphp.ru  

Laravel Livewire — Камень, ножницы, бумага (часть 1)

Напишем игру «Камень, ножницы, бумага» с помощью Laravel Livewire. Livewire позволяет создавать динамические веб-интерфейсы без программирования на JavaScript. Весь код будем писать исключительно на PHP, при этом приложение будет работать без перезагрузки страницы и общаться с сервером с помощью Ajax. Исходный код проекта: https://github.com/pqr/laravel-livewire-rock-paper-scissors Плейлист со всеми сериями: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq Источник: 5minphp.ru  

Архитектура сложных веб-приложений. С примерами на Laravel

Недавно я прочитал книгу «Архитектура сложных веб-приложений. С примерами на Laravel», автор Adel Faizrakhmanov. Эта книга не пособие. Много шаблонов описаны поверхностно, с целью просто познакомить читателя с ними. Более подробное описание можно найти по ссылкам в конце. Книга читается легко и с интересном, никакой воды, наоборот, иногда хочется продолжения и углубления в тему, больше …

ПодробнееАрхитектура сложных веб-приложений. С примерами на Laravel

Оптимизация ORDER BY RAND()

Обложка к записи Оптимизация ORDER BY RAND()

Как выбрать случайную запись из таблицы в MySQL? Во всех учебниках и мануалах случайную запись выбирают так: SELECT id FROM files ORDER BY rand() LIMIT 1; Но такие запросы работают очень медленно. Посмотрим на EXPLAIN: EXPLAIN SELECT id FROM files ORDER BY rand() LIMIT 1; Увидим, что MySQL создает временную таблицу и использует сортировку всех данных. …

ПодробнееОптимизация ORDER BY RAND()

PHP Russia Online и другие Online конференции Олега Бунина

Пятиминутка PHP · PHP Russia Online и другие Online конференции Олега Бунина В этот период, когда массовые мероприятия запрещены, IT конференции переходят в Online формат. Как выглядят Online конференции и как они будут выглядеть в будущем? Обсуждаем с Олегом Буниным, организатором многих IT конференций в России, включая такие известные ежегодные события, как HighLoad++, РИТ++ и …

ПодробнееPHP Russia Online и другие Online конференции Олега Бунина