TGViewer
Channel Public Channel
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

@phpproglib

Все самое полезное для пхпшника в одном канале.

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Subscribers
10.5K
Photos
1.8K
Videos
31
Links
4.6K
Recent Posts 20 shown
Post #6716 664
Какие существуют проблемы в многопоточной среде?

Основные проблемы многопоточности:

1️⃣ Race Condition — когда результат работы зависит от порядка выполнения потоков. Например, два потока одновременно изменяют одну переменную без синхронизации.

2️⃣ Deadlock — взаимная блокировка, когда потоки ждут друг друга. Классика: поток А держит ресурс 1 и ждёт ресурс 2, а поток Б держит ресурс 2 и ждёт ресурс 1.

2️⃣ Livelock — потоки активны, но не могут продолжить работу, постоянно реагируя на действия друг друга. Например, как два человека в коридоре, которые одновременно пытаются уступить дорогу.

4️⃣ Starvation — поток никогда не получает доступ к ресурсу из-за того, что другие потоки постоянно его перехватывают.

5️⃣ Memory Visibility — изменения, сделанные одним потоком, могут быть не видны другим из-за кэширования в CPU

🐸 Библиотека пхпшника
  • 👍 6
  • ❤ 3
  • 👾 2
Post #6715 985
🌞 В Symfony 8.2 появилось 29 новых Bundle — теперь компоненты вроде Mailer, Messenger и Cache сами поставляют конфигурацию и сервисы.

Было:


framework:
mailer:
dsn: '%env(MAILER_DSN)%’


Стало:


mailer:
dsn: '%env(MAILER_DSN)%’


Старый framework.* при этом продолжает работать — существующие проекты менять не нужно.

➡️ Ещё одно изменение: Forms больше не включает Validation автоматически. Для него теперь нужен symfony/validator.

🔗 Источник

🐸 Библиотека пхпшника
  • 👍 4
  • 🔥 1
Post #6714 1.01K
А вы уже забрали свой подарок ко Дню программиста?

К вашему профессиональному празднику Tproger, Proglib, Столото, Центральный университет и SmartApe собрали целую коробку подарков. Переходите по ссылке, трясите коробку и забирайте свой презент: https://tprg.ru/ZX3b

Реклама. ИП Михайлишина Гузель Фаниловна, erid: 2W5zFJrVGHw
  • 🥱 1
Post #6712 1.31K
🛠 `str_contains` и семья: проверяем строки без ловушек

Проверка через strpos годами путала новичков:


if (strpos($url, 'https') !== false) {
// ...
}


➡️ Почему нужен именно `!== false`?
Потому что совпадение в начале строки возвращает позицию 0, а 0 в PHP может трактоваться как false.

С PHP 8.0 есть три функции, которые сразу возвращают `bool`:


str_contains($email, '@'); // содержит подстроку
str_starts_with($url, 'https://'); // начинается с
str_ends_with($file, '.pdf'); // заканчивается на


Код читается проще — без проверки позиции и !== false.

📌 strpos всё ещё нужен, если требуется узнать позицию совпадения.

🐸 Библиотека пхпшника
  • 🥱 4
  • 🔥 2
Post #6711 1.33K
⚡️ Symfony 8.2: команды Console теперь можно вызывать через пробелы

В Symfony команды обычно записываются через ::


php bin/console tenant:users:import customers.csv


➡️ В Symfony 8.2 появился альтернативный синтаксис:


php bin/console tenant users import customers.csv


Оба варианта запускают одну и ту же команду.

Главное отличие — в spaced-синтаксисе каждый уровень может обрабатывать собственные опции:


php bin/console tenant --name=acme users import customers.csv --dry-run


Здесь:

🔘 tenant получает опцию --name;
🔘 users — промежуточный уровень;
🔘 import запускает конечную команду;
🔘 --dry-run передаётся последней команде.


Для доступа к параметрам родительских команд появился CommandChain:


public function __invoke(
CommandChain $chain,
#[Argument] string $file,
): int {
$tenantName = $chain
->getInput('tenant')
?->getOption('name');

// ...
}


Также Symfony 8.2 позволяет описывать целые группы команд в одном классе через #[AsCommand].

📌 Особенно полезно для CLI-приложений с многоуровневой структурой — например, docker compose, git или административных инструментов.

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

🐸 Библиотека пхпшника
  • 👍 4
  • 😢 2
Post #6710 1.39K
💰 Версионирование бизнес-правил в Laravel

Бизнес-правила меняются, но старые решения должны оставаться объяснимыми. Например, цена для одного и того же автомобиля может отличаться в зависимости от даты счёта.

Пакет Laravel Rulebook помогает:

🤩 хранить правила в отдельных PHP-классах;
🤩 задавать периоды действия;
🤩 выбирать правило по приоритету;
🤩 объяснять, почему оно победило;
🤩 сохранять результат решения в snapshot.


Пример:


$decision = $rulebook->resolveAt(
subject: $vehicle,
at: $invoice->issued_at,
context: $pricingContext,
);
$price = $decision->outcome();
$reason = $decision->winningResult()->reason();


Подходит для pricing, billing, eligibility и других сценариев, где важна история решений.

🔗 ⁠Laravel Rulebook на Packagist

🐸 Библиотека пхпшника
  • 👍 8
  • ❤ 3
Post #6709 1.33K
😭 Как не потратить недельный лимит AI-кодинга за три дня?

Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.

🔘 Поговорим о том:

— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.

✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.

⬇️ 17 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок

💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.

🔗 Зарегистрироваться на вебинар⁠
  • ❤ 1
  • 🥱 1
Post #6708 1.37K
🌞 PayZephyr: единый API для платежей в Laravel

Stripe, PayPal, Paystack и другие платёжные системы — через один интерфейс. PayZephyr объединяет работу с 8 провайдерами и предлагает:

— единый API для платежей;
— переключение между провайдерами и failover;
— защиту от повторного списания;
— проверку подписей вебхуков;
— возвраты и подписки.


🔘 Пример:

Payment::amount(100)
->currency('USD')
->pay();


🔘 Возврат:


Payment::refund($paymentId);


🔘 Установка:

composer require payzephyr/laravel


📌 Подойдёт, если приложение работает с несколькими платёжными системами и хочется не писать отдельную интеграцию для каждой.

🔗 ⁠GitHub

🐸 Библиотека пхпшника
  • 😁 6
  • 👍 3
Post #6706 1.51K
🌸 Вселенная намекает: пора уже начать этот курс

С 14 сентября цены в Proglib Academy вырастут на 20% 👀

Так что если курс давно ждёт своего часа — лучше не откладывать ещё на месяц 😏

📍 Выбрать курс
  • 😁 6
  • 🌚 3
Post #6705 1.65K
🔐 Sqids в Laravel: короткие публичные ID

Автоинкрементные ID удобны в базе, но не всегда подходят для публичных URL.

Sqids превращают их в короткие строки:


637 → 4nxk2a


При этом внутри Laravel остаются обычные integer-ключи, связи Eloquent и индексы.

В статье показано, как встроить Sqids в:

🟡 route model binding;
🟡 API Resources;
🟡 foreign keys;
🟡 входящие запросы.

🔗 Документация

🐸 Библиотека пхпшника
  • ❤ 3
  • 😢 1
Post #6704 1.7K
🌞 Готовим вебинар про AI в разработке и хотим сделать его максимально полезным

Что реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?


🤩 Пишите вопросы в комментариях — самые залайканные разберём на вебинаре в первую очередь.

Задавайте всё, что давно хотелось спросить 📍

🐸 Библиотека пхпшника
  • ❤ 4
Post #6703 1.76K
📍 Laravel Telescope 5.24: отладка прямо из Artisan

В новой версии Telescope искать и разбирать записи можно без открытия dashboard.

➡️ Появились две команды:


php artisan telescope:list request
php artisan telescope:show latest:request


➡️ list показывает последние записи Telescope. Можно фильтровать их по типу, тегу, batch ID и другим параметрам:


php artisan telescope:list exception --limit=5
php artisan telescope:list request --tag=Auth:42
php artisan telescope:list --batch=79a09461


➡️ show раскрывает конкретную запись и связанные с ней события: queries, cache operations, logs, exceptions и т. д.


php artisan telescope:show latest:exception
Для скриптов и coding agents есть --json:
php artisan telescope:show latest:exception --json


А --full отключает сокращение длинных SQL, сообщений и payload’ов.

💡 Особенно удобно для отладки в терминале: нашёл проблемный request → посмотрел его batch → увидел медленный query или exception, не переключаясь между CLI и браузером.

В 5.24 также исправили stale-запросы dashboard: при навигации старый polling-запрос больше не должен перезаписывать уже открытый экран.

🔗 Источник

🐸 Библиотека пхпшника
  • ❤ 4
  • 🔥 2
  • 👍 1
Post #6702 1.75K
💥 Именованные аргументы вместо загадочных true/false

Такой вызов приходится расшифровывать:


createUser('Аня', true, false, true);


🔴 Что означает каждый bool?

С PHP 8.0 можно передать аргументы по имени:


createUser(
name: 'Аня',
isAdmin: true,
sendEmail: false,
verified: true,
);


Сигнатуру метода менять не нужно — именованные аргументы работают прямо с существующими параметрами.

🔴 А ещё можно пропускать необязательные параметры и передавать только нужные:


createUser(
name: 'Аня',
verified: true,
);


Никаких зависимостей — просто вызов, который сам объясняет, что именно происходит.

⁠🔗 PHP Docs — Named Arguments

🐸 Библиотека пхпшника
  • 🥱 16
  • 👍 13
Post #6701 1.77K
🧠 spatie/laravel-data: типизированные DTO для Laravel

Вместо массивов вроде:


$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 становится больше, чем просто набором полей.

🔗 ⁠Документация

🐸 Библиотека пхпшника
  • 👍 13
  • 😁 4
Post #6700 2K
🤩 PHP и атрибуты: #[Override]

В PHP 8.3 появился атрибут #[Override], который помогает ловить ошибки при переопределении методов.

Если метода find() нет в родительском классе или интерфейсе, PHP сообщит об ошибке.


Полезно при рефакторинге: переименовал метод в базовом классе — наследники не останутся с «тихо сломанным» override.

🐸 Библиотека пхпшника
  • 👍 4
Post #6699 2.17K
🔎 Как быстро увидеть, что вы изменили в php.ini

В PHP 8.5 появилась малоизвестная CLI-опция:


php --ini=diff


Она показывает только настройки, которые отличаются от стандартной конфигурации PHP.

Полезно, когда нужно:

— разобраться, чем production отличается от дефолта;
— проверить Docker-образ;
— перенести конфигурацию на новый сервер.

Особенно удобно вместо ручного сравнения огромного php.ini.

🐸 Библиотека пхпшника
  • 👍 21
  • 🔥 3
  • ❤ 1
Post #6697 2.32K
🧬 Вы кешируете запросы в Redis, но забыли про OPcache?

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 при деплое.

💡 Хотите проверить, что лежит в кеше и сколько памяти занято? Используйте opcache_get_status() — или поставьте opcache-gui для визуального мониторинга.

🐸 Библиотека пхпшника
  • 👍 10
  • ❤ 2
Older posts →

About this channel

How can I read @phpproglib without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter have?
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) has 10.5K subscribers on Telegram, refreshed roughly every 30 minutes.
Does Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →