Автоинкремент удобен, но плохо подходит для распределённых систем. UUIDv4 решает проблему уникальности, зато случайные значения могут хуже работать с B-tree индексами.
use Symfony\Component\Uid\Uuid;
$id = Uuid::v7();
echo $id->toRfc4122();
// 0192f8a1-...
echo $id->getDateTime();
// время, закодированное в UUID
$id->toBase58();
composer require symfony/uid
Особенно интересно для распределённых сервисов, где ID нужно генерировать независимо от БД.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10
Библиотека написана на Laravel и включает все необходимое:
— аутентификация,
— профили пользователей,
— биллинг,
— подписка,
— роли и права доступа,
— уведомления и административная панель.
Инструмент упрощает создание SaaS-приложений, предоставляя необходимые базовые компоненты и гибкие возможности для дальнейшей настройки
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2😁1
PHP компилирует каждый .php-файл в байткод при каждом запросе — если не настроен OPcache. Это означает лишние CPU-циклы на парсинг даже самого тривиального хелпера.
; включаем
opcache.enable=1
opcache.enable_cli=1
; кол-во кешируемых файлов (>= числа файлов в проекте)
opcache.max_accelerated_files=20000
; размер разделяемой памяти (MB)
opcache.memory_consumption=256
; кешируем строки — экономим RAM
opcache.interned_strings_buffer=16
; в продакшне: 0 (не проверять изменения файлов)
opcache.validate_timestamps=0
Почему validate\_timestamps=0 в проде
При каждом запросе PHP проверяет mtime файла на диске. На высоких RPS — это сотни лишних stat()-syscall'ов в секунду. Инвалидируйте кеш вручную через opcache_reset() или перезапуск PHP-FPM при деплое.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31🥱3❤2💯2
В PHP 8.5 появилась малоизвестная CLI-опция:
php --ini=diff
Она показывает только настройки, которые отличаются от стандартной конфигурации PHP.
Полезно, когда нужно:
— разобраться, чем production отличается от дефолта;
— проверить Docker-образ;
— перенести конфигурацию на новый сервер.
Особенно удобно вместо ручного сравнения огромного php.ini.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥3
В PHP 8.3 появился атрибут #[Override], который помогает ловить ошибки при переопределении методов.
Если метода find() нет в родительском классе или интерфейсе, PHP сообщит об ошибке.
Полезно при рефакторинге: переименовал метод в базовом классе — наследники не останутся с «тихо сломанным» override.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Вместо массивов вроде:
$email = $data['email'];
$quantity = $data['quantity’];
class OrderData extends Data
{
public function __construct(
public string $email,
public int $quantity,
public ?string $promoCode = null,
) {}
}
$order = OrderData::from($request->all());
echo $order->email;
Дальше работают обычные типы PHP и автодополнение IDE, а laravel-data добавляет маппинг, валидацию, вложенные DTO и преобразование обратно в массив или JSON.
Удобный вариант, когда DTO в Laravel становится больше, чем просто набором полей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13😁3
Такой вызов приходится расшифровывать:
createUser('Аня', true, false, true);
С PHP 8.0 можно передать аргументы по имени:
createUser(
name: 'Аня',
isAdmin: true,
sendEmail: false,
verified: true,
);
Сигнатуру метода менять не нужно — именованные аргументы работают прямо с существующими параметрами.
createUser(
name: 'Аня',
verified: true,
);
Никаких зависимостей — просто вызов, который сам объясняет, что именно происходит.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱15👍11
В новой версии Telescope искать и разбирать записи можно без открытия dashboard.
php artisan telescope:list request
php artisan telescope:show latest:request
php artisan telescope:list exception --limit=5
php artisan telescope:list request --tag=Auth:42
php artisan telescope:list --batch=79a09461
php artisan telescope:show latest:exception
Для скриптов и coding agents есть --json:
php artisan telescope:show latest:exception --json
А --full отключает сокращение длинных SQL, сообщений и payload’ов.
В 5.24 также исправили stale-запросы dashboard: при навигации старый polling-запрос больше не должен перезаписывать уже открытый экран.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥2👍1
Что реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?
Задавайте всё, что давно хотелось спросить
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🔐 Sqids в Laravel: короткие публичные ID
Автоинкрементные ID удобны в базе, но не всегда подходят для публичных URL.
Sqids превращают их в короткие строки:
При этом внутри Laravel остаются обычные integer-ключи, связи Eloquent и индексы.
В статье показано, как встроить Sqids в:
🟡 route model binding;
🟡 API Resources;
🟡 foreign keys;
🟡 входящие запросы.
🔗 Документация
🐸 Библиотека пхпшника
Автоинкрементные ID удобны в базе, но не всегда подходят для публичных URL.
Sqids превращают их в короткие строки:
637 → 4nxk2a
При этом внутри Laravel остаются обычные integer-ключи, связи Eloquent и индексы.
В статье показано, как встроить Sqids в:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2