Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: clc.to/M561SQ Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
نمایش بیشتر📈 تحلیل کانال تلگرام Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
کانال Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 10 524 مشترک است و جایگاه 11 391 را در دسته فناوری و برنامهها و رتبه 60 853 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 10 524 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 25 اوت, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -62 و در ۲۴ ساعت گذشته برابر 1 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 19.18% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 9.49% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 2 019 بازدید دریافت میکند. در اولین روز معمولاً 999 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 16 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند php, laravel, пхпшника, artisan, api تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“Все самое полезное для пхпшника в одном канале.
По рекламе: @proglib_adv
Учиться у нас: clc.to/M561SQ
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 26 اوت, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
● При покупке VIP-тарифа (осталось 4 места) нового потока «Разработка ИИ-агентов» получаете в подарок курс «AgentOps» + ещё один любой курс Академии (например, «Математика для разработки AI», чтобы глубже освоить направление). ● Три курса обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽. ● Доступна удобная беспроцентная рассрочка, платеж можно разбить на несколько комфортных частей.Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой. 👉 Забрать 3 курса по цене 1 и получить демо-урок
— При покупке VIP-тарифа (осталось 4 места) нового потока «ИИ-агенты» вы получаете в подарок доступ к курсу «AgentOps» + ещё один любой курс Академии на выбор — В деньгах это два топовых курса по автоматизации и контролю ИИ всего за 134.000 ₽ вместо 263.000 ₽ 🔥 А за счет третьего курса (например, можно выбрать «Математику») вы соберете мощный стек и освоите целое востребованное направление. — Платеж можно разбить на несколько частей с помощью беспроцентной рассрочки.👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates
— Вся цепочка: openssl s_client -connect example.com:443 -showcerts </dev/null
— Subject и issuer: echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -issuer
— Проверить локальный файл: openssl x509 -in cert.pem -noout -text
— Дней до истечения: echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate// src/Order/OrderStatusLabel.php
class OrderStatusLabel
{
public function render(string $status): string
{
return match ($status) {
'new' => 'Новый',
'paid' => 'Оплачен',
'shipped' => 'Отправлен',
'delivered' => 'Доставлен',
'cancelled' => 'Отменён',
};
}
}
// src/Order/OrderCard.php
class OrderCard
{
public function __construct(private readonly OrderStatusLabel $label) {}
public function build(Order $order): array
{
return [
'id' => $order->getId(),
'status' => $this->label->render($order->getStatus()),
];
}
}
🔹 Задачи
— Объяснить, чем поведение match тут отличается от switch и почему это привело к 500
— Предложить способ сделать код устойчивым к новым значениям, но НЕ замаскировать реальные баги
Ставьте → 🔥 если нравится формат. Если нет → 🌚
💬 Решения пишите в комменты под спойлер — сравним подходы.final readonly class PendingOrdersQuery
{
public function handle(?int $merchantId = null, int $perPage = 50): LengthAwarePaginator
{
return Order::query()
->with(['customer', 'payment'])
->whereIn('status', [OrderStatus::Pending, OrderStatus::PaymentFailed])
->where('created_at', '<=', now()->subMinutes(15))
->when($merchantId !== null,
fn (Builder $q) => $q->where('merchant_id', $merchantId))
->latest()
->paginate($perPage);
}
}
Контроллер больше не знает определения «заказов, требующих внимания». Это определение теперь называется PendingOrdersQuery.
🔹 Это НЕ репозиторий
Репозиторий обычно оборачивает каждый метод модели в generic-CRUD и притворяется, что БД нет. Query Class делает обратное: не прячет Eloquent, а централизует один конкретный важный запрос. Репозиторий = источник данных. Query Class = одна операция против БД с чёткой целью.
🔹 А чем плохи local scopes?
Ничем. Для переиспользуемого ограничения, которое естественно принадлежит модели, скоуп — первый инструмент. Query Class уместен, когда запрос перерос простое ограничение: координирует несколько скоупов, тащит кучу опциональных фильтров, рулит eager loading под конкретный экран, возвращает агрегаты, используется из нескольких точек или требует отдельных тестов.
И они отлично работают вместе: модель владеет доменным ограничением (needingAttention()), Query Class — сценарием использования БД.
🔹 handle() возвращает результат или Builder?
Единый результат — выполняй внутри (->count(), ->paginate()). Один запрос нужен разным потребителям с разными типами результата — верни Builder:
$articles = new PublishedArticlesQuery()->handle()->paginate(12);
$urls = new PublishedArticlesQuery()->handle()->get();
Только не превращай класс в свалку публичных методов — это снова тот самый generic-репозиторий. Хорошие Query Classes скучные и сфокусированные.
🔹 Писать тоже умеют
Если ценность именно в самой операции с БД, запрос на запись тоже подходит:
final readonly class ExpireAbandonedOrdersQuery
{
public function handle(CarbonImmutable $expiredBefore): int
{
return Order::query()
->where('status', OrderStatus::Pending)
->where('created_at', '<=', $expiredBefore)
->update(['status' => OrderStatus::Expired, 'expired_at' => now()]);
}
}
Но если запись часть бизнес-воркфлоу (сайд-эффекты, диспатч джоб, смена стейта), её место в Action, а не здесь.
🔹 Когда использовать
Когда у операции есть бизнес-смысл: CustomersEligibleForDiscountQuery, InvoicesReadyToBeChargedQuery. Когда запрос повторяется, тяжёлый по фильтрам/eager loading, живёт в отчётах и фоне, должен тестироваться отдельно, а модель уже захлёбывается скоупами. Бонус — онбординг: новичок найдёт SearchOrdersQuery быстрее, чем цепочку в недрах контроллера.
🔹 Когда НЕ использовать
Article::findOrFail($id) не нуждается в FindArticleByIdQuery. Если имя класса просто дублирует метод Eloquent, если запрос в одном месте и прост, если скоуп уже всё выражает — не плоди классы. Начинай с чистого Eloquent. Выделяй Query Class, когда запрос это заслужил.
🔹 Тесты
Тестируем не Eloquent (его уже протестировали в Laravel), а наши правила: какие записи попадают, какие отсекаются, в каком порядке. Один тест на дефолтное поведение + точечные на важные фильтры и рискованные края. Комбинаторика всех фильтров не нужна.
🔹 Пять правил на каждый день
— Имя по бизнес-вопросу (PendingOrdersQuery), а не по операции (GetOrdersQuery)
— С записями избирательно: бизнес-правила → Action
— Без абстрактных базовых классов, пока нет реального дублирования
— Один публичный метод handle(), остальное private
— Не прячь Eloquent ради пряток. Возвращать Builder нормально
Ценность паттерна не в количестве классов, а в том, что код становится легче понимать, менять и доверять ему со временем.Для этого курса мы ищем классных спикеров-практиков.➡️ Что требуется от вас? ● BigTech бэкграунд: опыт работы разработчиком, тимлидом или архитектором в крупных технологических компаниях. ● Опыт управляемой разработки с ИИ: вы на практике знаете, как встроить AI-инструменты в личный или командный workflow (от постановки задачи до ревью AI-кода). ● Системный подход: умение превращать хаотичную генерацию кода в предсказуемый инженерный процесс (работа с архитектурой, чек-листами, легаси и покрытием тестами). ➡️ Что мы предлагаем? ● Достойную оплату за подготовку материалов и проведение занятий. ● Мощное продвижение личного бренда через медиаресурсы Proglib (наша аудитория — 1 млн+ айтишников). ● Возможность публиковать свои экспертные материалы и статьи на наших площадках. ● Доступ к сильному и закрытому профессиональному сообществу. Также мы ищем консультанта программы. Если вы практикующий эксперт и готовы помочь нам отвалидировать программу курса, дать рекомендации по актуальности тем и финальным результатам обучения — мы вас очень ждем. ➡️ Как с нами связаться: Telegram: @alinaa_kh E-mail: alina@proglib.io
