Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
10.7K subscribers
1.7K photos
27 videos
27 files
4.49K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: clc.to/M561SQ

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
#advanced #release

Сегодня, кстати, состоялся первый «community» релиз псалма без его автора, Мэтта Брауна, который ранее решил, что на этом все, пора уходить в Rust.

https://github.com/vimeo/psalm/releases/tag/4.9.0
#php81 #release

Этот день настал. Вышел релиз php 8.1. Обзор новых фич по ссылке и на нашем канале в ближайшие дни.

https://www.php.net/archive/2021.php#2021-11-25-1
🧪 Тестирование Symfony-конфигов

Библиотека matthiasnoback/symfony-config-test предоставляет PHPUnit-трейт с готовыми ассертами для проверки дерева конфигурации. Она позволяет убедиться, что конфиги ведут себя корректно при невалидных данных, мёрже и дефолтах:

class ConfigurationTest extends TestCase
{
use ConfigurationTestCaseTrait;

protected function getConfiguration(): Configuration
{
return new Configuration();
}

public function test_invalid(): void
{
$this->assertConfigurationIsInvalid(
[[]], // пустой массив
'required_value'
);
}

public function test_processed(): void
{
$this->assertProcessedConfigurationEquals(
[['key' => 'first'], ['key' => 'last']],
['key' => 'last']
);
}
}


Через параметр breadcrumbPath можно тестировать отдельную ветку дерева (например, doctrine.orm), игнорируя остальные required-ноды. Версия 6.x поддерживает PHPUnit 10–12.

Репозиторий на GitHub

Библиотека пхпшника

#release_radar
👍2🔥1
🚀 Laravel 13.6.0: дебаунс для очередей из коробки

Частое сохранение документа плодит в очереди дублирующиеся задачи переиндексации. Раньше спасал интерфейс ShouldBeUnique, который блокирует диспатчи на входе. Теперь добавлен полноценный debounce — выполняется только последняя задача.

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

#[DebounceFor(30, maxWait: 120)]
class RebuildSearchIndex implements ShouldQueue
{
public function __construct(public int $documentId) {}

public function debounceId(): string
{
return (string) $this->documentId;
}

public function handle(): void
{
SearchIndex::rebuild($this->documentId);
}
}


Запустить дебаунс можно и без правки класса: dispatch(new SyncData($id))->debounceFor(30).

Другие обновления релиза:

роут /up отдает JSON по заголовку Accept (полезно для балансировщиков);
— добавлен JsonFormatter для структурных логов;
— появился транспорт Cloudflare Email.

🔗 Читать подробнее

Библиотека пхпшника

#release_radar
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥1👏1