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

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

Учиться у нас: https://proglib.io/w/bca892d6

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🐘 PHP для начинающих (и напоминание для опытных)

🔹 Query Scopes

Смотришь на свой код и замечаешь одно и то же в пяти местах:
->where('status', 'active')->where('deleted_at', null)
->where('status', 'active')->where('deleted_at', null)
->where('status', 'active')->where('deleted_at', null)


Это не переиспользование кода. Это его копирование. Разница важная.

▪️ Local Scope — прячем логику в модель

// User.php
public function scopeActive(Builder $query): Builder
{
return $query->where('status', 'active')
->whereNull('deleted_at');
}

public function scopeVerified(Builder $query): Builder
{
return $query->whereNotNull('email_verified_at');
}


Теперь вместо цепочки условий — читаемый вызов
// Было
User::where('status', 'active')
->whereNull('deleted_at')
->whereNotNull('email_verified_at')
->get();

// Стало
User::active()->verified()->get();


▪️ Scope с параметром


Иногда нужна гибкость. Scope принимает аргументы:
public function scopeOlderThan(Builder $query, int $days): Builder
{
return $query->where('created_at', '<', now()->subDays($days));
}
phpUser::active()->olderThan(30)->get();


▪️ Global Scope — когда условие должно быть всегда


Если SoftDeletes работает по всему приложению — это глобальный скоуп под капотом. Можно написать свой:
// В модели
protected static function booted(): void
{
static::addGlobalScope('tenant', function (Builder $builder) {
$builder->where('tenant_id', auth()->user()?->tenant_id);
});
}


Теперь все запросы к этой модели автоматически фильтруются по тенанту. Без единого where в контроллерах.

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

#php_азбука
👍84🔥2🥱1
⚙️ Laravel Process Pipe

С версии Laravel 10.7 появилась нативная поддержка конвейера процессов (pipe). Теперь можно легко передавать вывод одного процесса на вход другого — прямо из PHP-кода, без костылей.

use Illuminate\Process\Pipe;
use Illuminate\Support\Facades\Process;

$result = Process::pipe(function (Pipe $pipe) {
$pipe->command('cat example.txt'),
$pipe->command('grep -i "laravel"'),
});

if ($result->successful()) {
// ...
}


Это аналог привычного cat example.txt | grep -i "laravel" в терминале, только внутри Laravel.

Зачем это нужно?

— Обработка файлов и потоков данных без временных переменных
— Чистый и читаемый код вместо вызовов shell_exec
— Удобное тестирование через фейковые процессы

Маленькая фича, но приятная 🙂

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

#vardump
👍31😁1
Почитали тут свежий отчёт по рынку ИИ-ускорителей в РФ: оказывается, 54% компаний тормозят внедрение ИИ исключительно из-за конских цен на инфраструктуру.

Ну, то есть написать пет-проект с вызовом API это задача на вечер, а вот запустить агента в продакшн так, чтобы он не сжёг бюджет отдела за неделю — суровая инженерия.

По сути, сейчас мало уметь собирать RAG. Нужно считать токены, настраивать time-travel дебаг в LangGraph и уметь роутить запросы на лету. Всё это мы учли в обновлённом курсе по разработке AI-агентов, где акцент сделан именно на AgentOps и жёсткий контроль ресурсов.

Также в программе:

— оценка качества, трейсинг и защита от деградации пайплайнов;
— мультиагентные паттерны и интеграция по протоколу MCP;
— локальный деплой Open Source под 152-ФЗ (когда данные нельзя выносить наружу).

Кажется, это единственный адекватный roadmap по переходу от блокнотов к enterprise-решениям.

Прямо сейчас можно урвать курс с увесистой скидкой (49 000 ₽ 62 990 ₽ за базовый тариф и 99 000 ₽ 124 990 ₽ за продвинутый трек), но стоит поторопиться — на потоке осталось всего 5 мест.

👉 Зафиксировать цену и начать собирать агентов, за которых не стыдно в проде
🥱1