PHP Academy
9.43K subscribers
168 photos
35 videos
317 links
@workakkk - с вопросами
Download Telegram
Совет по Laravel 💡

Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например, при регистрации и создании панели администратора)?

Обратите внимание на функцию Password::defaults().

Ознакомьтесь со всеми правилами в документации: https://github.com/illuminate/validation/blob/master/Rules/Password.php
8🔥3🤔2
Совет по Laravel💡

Хотите быстро вывести SQL-запросы, выполненные во время вашего запроса?

И не хотите устанавливать Debugbar, Telescope и т.п.?

Используйте DB::listen() с toRawSql()!
👍11🔥82🐳1
⚡️ Нужно кэшировать тяжелые вычисления в Laravel?

Используй помощник once, который выполняет обратный вызов один раз и кэширует результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥42
🌊 Wave — стартер-пак для разработки SaaS-приложений

Библиотека написана на Laravel и включает все необходимое:

— аутентификация,
— профили пользователей,
— биллинг,
— подписка,
— роли и права доступа,
— уведомления и административная панель.

Инструмент упрощает создание SaaS-приложений, предоставляя необходимые базовые компоненты и гибкие возможности для дальнейшей настройки.

💻 GitHub
4
Когда DDD вам НЕ нужен (и когда нужен)

DDD - это не про структуру папок. Это про борьбу со сложностью.

Самая большая ловушка: прочитав Эванса или Вернона, начать пихать DDD в простой CRUD. Если ваше приложение просто перекладывает JSON из запроса в базу, DDD сделает разработку в 3 раза дороже и медленнее.

🚦 Когда DDD избыточен:

💜Админки, простые CMS.
💜Микросервисы-прокси.
💜Прототипы (MVP), которые нужно выкинуть через месяц.

🔥 Когда DDD необходим:

💜Сложный бизнес-процесс: (например, расчет налога с учетом льгот, региона и фазы луны).
💜Долгоживущий проект: (вы будете поддерживать это 3+ года).
💜Важность языка: Когда менеджер говорит «списать бонус», а в коде это $user->points -= 10. Это рассинхрон, который приведет к багам. В DDD это будет $user->debitBonuses(10).

Главный принцип:
DDD применяется не ко всему проекту целиком, а к Core Domain (Ядру). Вспомогательные модули (отправка почты, логи) могут и должны оставаться простыми.

Вывод: Не стройте "Звезду Смерти" для доставки пиццы. Сложность архитектуры должна соответствовать сложности бизнеса.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍204🤣1
Совет по Laravel 💡: Метод «diffInDaysFiltered»

Вам когда-нибудь требовалось подсчитать количество дней между двумя датами при фильтрации по условию? Поскольку Laravel использует Carbon под капотом, вы можете использовать «diffInDaysFiltered», чтобы сделать именно это 🚀.

#laravel
13❤‍🔥3
⚡️ 8 хуков Claude Code, которые автоматизируют то, что вы вечно забываете

Вы говорите Claude Code отформатировать файл, а он этого не делает. Просите не трогать .env, а он лезет туда первым делом. Напоминаете прогнать тесты перед завершением, а он забывает.

Знакомо?

Все потому, что CLAUDE.md по сути является рекомендацией. Claude читает его и следует ему примерно в 80% случаев. Хуки работают иначе.

Это автоматические действия, которые срабатывают каждый раз, когда Claude редактирует файл, выполняет команду или завершает задачу.
Ниже разберем 8 готовых хуков, которые можно скопировать прямо в settings.json и больше о них не вспоминать.

https://uproger.com/8-hukov-claude-code-kotorye-avtomatiziruyut-to-chto-vy-vechno-zabyvaete/
👍53
⌛️ Как настроить production-ready логирование в PHP

Логи в проде — это не просто error_log(). Это структурированные данные, correlation ID, асинхронная запись и ротация. Разбираем пошаговую настройку.

1️⃣ Выбираем стек: Monolog

PHP де-факто стандарт для логирования — Monolog. Устанавливаем через Composer:

composer require monolog/monolog


Если на Laravel, уже есть из коробки. Если нет, то подключаем вручную.

2️⃣ Базовая конфигурация с JSON-форматом


use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\JsonFormatter;

$log = new Logger('app');

$handler = new RotatingFileHandler(
__DIR__ . '/logs/application.log',
maxFiles: 30,
level: Logger::INFO
);

$handler->setFormatter(new JsonFormatter());
$log->pushHandler($handler);


JSON-формат удобен для парсинга в ELK / Grafana Loki.

3️⃣ Добавляем Correlation ID

Трекаем каждый запрос через Processor:


class CorrelationIdProcessor implements ProcessorInterface
{
private string $correlationId;

public function __construct()
{
$this->correlationId = $_SERVER['HTTP_X_CORRELATION_ID']
?? bin2hex(random_bytes(16));

header('X-Correlation-ID: ' . $this->correlationId);
}

public function __invoke(array $record): array
{
$record['extra']['correlation_id'] = $this->correlationId;
return $record;
}
}

$log->pushProcessor(new CorrelationIdProcessor());


Теперь каждая строка лога привязана к конкретному запросу.

4️⃣ Ротация и лимиты


$handler = new RotatingFileHandler(
filename: __DIR__ . '/logs/app.log',
maxFiles: 30,
level: Logger::WARNING,
);


Для ограничения по размеру связываем с logrotate на уровне системы:


# /etc/logrotate.d/php-app
/var/www/app/logs/*.log {
daily
rotate 30
compress
missingok
size 100M
}


5️⃣ Асинхронная запись

PHP синхронный по природе, но можно буферизовать тяжёлые хендлеры:


use Monolog\Handler\BufferHandler;

$bufferHandler = new BufferHandler(
handler: new StreamHandler('logs/app.log'),
bufferSize: 100,
flushOnOverflow: true
);

$log->pushHandler($bufferHandler);


Буферизуем записи и сбрасываем пачкой → меньше I/O операций.

6️⃣ Интеграция с мониторингом

Отправляем в Graylog через GELF:


use Monolog\Handler\GelfHandler;
use Gelf\Publisher;
use Gelf\Transport\UdpTransport;

$publisher = new Publisher(
new UdpTransport('logstash.example.com', 12201)
);

$log->pushHandler(new GelfHandler($publisher));


Или напрямую в Telegram для критических ошибок. Отдельный хендлер, 5 минут работы.

📌 Итог

Monolog + JsonFormatter + CorrelationId + logrotate = логи, с которыми не стыдно идти в прод.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1🔥1
Совет по Laravel

Передавайте большие файлы без задержек, используя потоки
👍14🔥21
🚀 Ты всё ещё называешь обёртку над ChatGPT «AI-продуктом»?

Пока ты пишешь промпты - рынок уже ушёл дальше.

Сейчас выигрывают не те, кто умеет красиво формулировать запросы, а те, кто строит агентные системы:
- принимают решения сами
- ходят в API
- работают с Postgres и Redis
- управляют браузером через Playwright
- доводят задачи до результата без человека

И вот правда, о которой мало говорят:

90% таких систем умирают между ноутбуком и продом.

Работает локально. Ломается в реальности.
Нет архитектуры. Нет устойчивости. Нет деплоя.

AI Agents Engineering - курс со Stepik, который закрывает этот разрыв.

- LangGraph, AutoGen, Computer Use
- архитектура агентов, а не «скрипты на коленке»
- LLMOps, логирование, стабильность
- деплой в Docker и работа в проде

8 модулей, 120+ шагов, всё через практику.

На выходе не «сертификат ради галочки», а:
- рабочий production-агент
- понимание, как строить такие системы с нуля
- навыки, за которые уже платят

Сейчас самое окно входа.
Через полгода это станет базой, а не преимуществом.

Скидка 55% действует ещё 48 часов: https://stepik.org/a/276971/
3👍1🔥1
Совет по Laravel 💡

Данные загружаются быстрее, если целевое значение является целым числом.

Используйте 𝘄𝗵𝗲𝗿𝗲𝗜𝗻𝘁𝗲𝗴𝗲𝗿𝗜𝗻𝗥𝗮𝘄() вместо метода 𝘄𝗵𝗲𝗿𝗲𝗜𝗻(), чтобы быстрее загружать данные, когда целевое значение является целым числом.
👍9👎1
👣 На Stepik обновили курс «Rust: полный курс разработчика. С нуля до профи»

Представьте: через три месяца вы открываете чужой Rust-код и читаете его как книгу.

Arc<Mutex<T>> не вызывает панику. impl Future не пугает. Вы точно знаете, почему компилятор ругается и как это починить за 10 секунд.

Это не фантазия. Это результат 50 уроков, в которых каждая концепция объясняется через код и закрепляется практикой.

Ownership, traits, generics, async, unsafe - всё, что казалось магией, станет рабочим инструментом.

А бонусом - портфолио проектов: от CLI-утилит до REST API и WebAssembly.

Вы и так знаете, что Rust - ваш следующий язык. Этот курс просто сделает это реальностью.

Сегодня - 55% процентов от цены, торопись: https://stepik.org/a/269250/
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥1🥰1
Советы по Laravel

Если вы создаете API в своем проекте:
🪐 Применяйте версионирование в самом первом релизе
🪐 Поддерживайте чистоту в routes/api.php, создавая разные файлы маршрутов для каждой версии👇

🧹 Более чистый код, 📈 Лучшие результаты
👍64💯1
Совет по PHP/Laravel 💡

Вместо того чтобы выполнять цикл `foreach` по массиву для поиска значения записи, вы можете использовать метод Laravel Collection `contains()`.
10👍10🔥1💩1
😁29👍7🔥52🤣2😱1
Один человек написал код, который сегодня работает на 20+ млрд устройств

Даниэль Стенберг начал cURL в 1996 году как маленькую утилиту для скачивания файлов из интернета.

Без большой команды. Без венчурных денег. Без хайпа. Просто писал open-source инструмент в свободное время.

Почти 30 лет спустя cURL стал тихим фундаментом интернета.

Он есть в iPhone, Android, PlayStation, Tesla, серверах, приложениях, сайтах и куче устройств, о которых мы даже не думаем. Его используют Spotify, YouTube, Netflix, Instagram и тысячи других сервисов.

NASA даже использовала cURL на марсианском вертолёте Ingenuity.

То есть код Стенберга буквально летал на другой планете.

Самое безумное - первые 23 года он не зарабатывал на cURL ничего. Триллионные компании строили продукты на его коде, а он продолжал бесплатно поддерживать проект и отвечать на баг-репорты.

В 2017 году король Швеции вручил ему премию Полхема - впервые в истории эту награду получил open-source проект.

В 2019 году Стенберг наконец начал работать над cURL фултайм в wolfSSL. В 2025 году получил золотую медаль IVA от Королевской шведской академии инженерных наук.

Но по сути ничего не изменилось: он всё ещё пишет код из домашнего офиса в Стокгольме и сам отвечает на GitHub issues.

Почти 30 лет человек делал инструмент, который работает в фоне и держит огромную часть интернета.

Без громких презентаций.

Без миллиардных раундов.

Просто хороший код, который пережил почти всё.
🔥46👍138👏3
✔️ Machine Learning Roadmap: нормальная карта входа в ML без сказок про «выучить нейросети за месяц»

Большой русскоязычный roadmap по машинному обучению: от первого import numpy до LLM, RAG, fine-tuning, AI-агентов и MLOps.

И это не просто очередной список ссылок в стиле «посмотри 40 курсов и станешь ML engineer». Внутри нормальная структура: что учить, в каком порядке, зачем это нужно и какой практический артефакт должен появиться после каждого этапа.

Roadmap разбит на 7 треков:

- фундамент: Python, математика, статистика, инструменты
- классический ML: scikit-learn, табличные данные, метрики, валидация
- Deep Learning: PyTorch, CNN, RNN, training loop
- LLM и трансформеры: attention, KV-cache, RAG, LoRA, агенты
- Generative AI: изображения, видео, аудио, мультимодальность
- MLOps и прод: Docker, Kubernetes, CI/CD, мониторинг, serving
- специализация: CV, NLP, RecSys, RL, Safety

Самое полезное - там честно написано, что ML это не только «обучить модель». В реальности большая часть работы живёт вокруг данных, метрик, деплоя, мониторинга, воспроизводимости и понимания, почему модель вообще ошибается.

Хорошая мысль из roadmap: LLM не делает джуна сениором. Она ускоряет того, кто понимает базу. Без базы человек просто превращается в оператора Copilot, который не может объяснить, почему модель сломалась.

По времени тоже без инфоцыганства:

- 0-3 месяца: кодинг, математика, классический ML
- 3-6 месяцев: Deep Learning и PyTorch
- 6-12 месяцев: LLM, RAG, fine-tuning, AI-агенты
- 12+ месяцев: MLOps, прод, масштабирование, специализация

Короче, если давно хотели системно зайти в ML, а не прыгать между роликами про ChatGPT, Stable Diffusion и «топ-10 библиотек», это хороший ориентир.

https://github.com/justxor/MachineLearningRoadmap/tree/main
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥2🥰1
Совет по Laravel 💡

Знаете ли вы, что... вы можете временно отключить timestamps при сохранении модели?
👍42
Docker и Kubernetes: основы разработки под облачную инфраструктуру

Курс для тех, кто хочет держать свой стэк и знания актуальными и глубоко разбираться, как устроены Docker, Kubernetes, и современная облачная инфраструктура в целом.

🌐 Чему вы научитесь:

🤩 Создавать облачную инфраструктуру «с нуля» управление и конфигурация серверов с Terraform, Ansible, cloud‑init
🤩 Уверенно работать с Docker: Dockerfile, слои, кэш, многоступенчатые сборки, реестры, безопасность, air‑gapped
🤩 Проектировать многоконтейнерные приложения: паттерны Sidecar, Ambassador, Adapter, проверки (liveness/readiness), DaemonSet и поды
🤩 Настраивать сеть и балансировку в Kubernetes
ClusterIP, Services, Ingress, MetalLB, TLS/SNI, сервис‑меши (Istio)
🤩 Организовывать хранение данных: PersistentVolumes / PVC, StorageClasses, резервное копирование. Упаковка в Helm и поддержка через Operator

🥸 Кто мы: R&D-центр Devhands. Автор курса — Николай Ихалайнен, эксперт по СУБД и бекенду (ex-Percona), со-основатель MyDB, энтузиаст открытого ПО.

🗓 Старт курса: 10 июня, 6 недель обучения.
Изучить программу и записаться можно здесь.

Ждем вас!

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqxNnFKA
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱2👏1🤮1
Оптимизация скорости работы PHP кода 🏎️

Сегодня я покажу вам несколько простых, но эффективных способов ускорить выполнение PHP-скриптов. Оптимизация кода – важная часть работы разработчика, ведь никто не любит медленные сайты. 🚀

🔥 1. Избегайте лишних запросов к БД
Частая ошибка – несколько одинаковых запросов к базе данных в одном запросе. Используйте кэширование (Redis, Memcached), а если данные редко меняются – сохраняйте их в файл.

🔥 2. Используйте isset() вместо array_key_exists()
Функция isset() работает быстрее, чем array_key_exists(), потому что она не только проверяет наличие ключа, но и сразу его значение.


// Медленный вариант
if (array_key_exists('key', $array)) { }

// Быстрый вариант
if (isset($array['key'])) { }


🔥 3. Не злоупотребляйте foreach при больших объемах данных
Если у вас массив с десятками тысяч элементов, попробуйте array_map() или array_walk() – они работают быстрее за счет встроенной оптимизации в C.

🔥 4. Подключайте файлы правильно
Разница между require, include, require_once и include_once может сильно повлиять на производительность. require_once проверяет, был ли уже подключен файл, что замедляет выполнение. Если точно знаете, что файл не дублируется – используйте require.

🔥 5. Включите OPCache
OPCache кэширует байт-код PHP и ускоряет его выполнение в разы. Включите его в php.ini:


opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1


🔥 6. Используйте json_encode() вместо serialize()
Функция json_encode() работает быстрее, чем serialize(), и при этом генерирует более компактные данные.


$data = ['name' => 'John', 'age' => 25];

// Медленный вариант
$serialized = serialize($data);

// Быстрый вариант
$json = json_encode($data);


Оптимизация PHP кода — это не магия, а грамотный подход к написанию скриптов. Используйте эти советы, и ваши проекты станут быстрее!
👍108👎3🔥2🌚1