Совет по Laravel💡
Уникальные идентификаторы запросов
Вам когда-нибудь требовалось создать код уникального идентификатора для запроса, например, для целей кэширования? Laravel поставляется с методом «
#laravel
📲 Мы в MAX
👉 @php_lib
Уникальные идентификаторы запросов
Вам когда-нибудь требовалось создать код уникального идентификатора для запроса, например, для целей кэширования? Laravel поставляется с методом «
fingerprint», который позволяет вам генерировать уникальный идентификатор для ваших запросов 🚀#laravel
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Привет, разработчики Laravel 👩💻
Начиная с Laravel v11.18.0, в методе
Пример использования метода
Раньше при использовании метода
Теперь мы можем передать параметр
Это может улучшить пользовательский опыт для некоторых приложений.
📲 Мы в MAX
👉 @php_lib
Начиная с Laravel v11.18.0, в методе
Str::limit() появился новый параметр preserveWords.Пример использования метода
limit() — отображение предварительных версий текстового контента, таких как резюме или отрывки блог-постов.Раньше при использовании метода
limit он мог разрывать слова посередине.Теперь мы можем передать параметр
preserveWords как true, и Laravel умно применит ограничение так, чтобы последнее слово было полным.Это может улучшить пользовательский опыт для некоторых приложений.
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Совет по Laravel 💡
Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например, при регистрации и создании панели администратора)?
Обратите внимание на функцию
Ознакомьтесь со всеми правилами в документации: https://github.com/illuminate/validation/blob/master/Rules/Password.php
📲 Мы в MAX
👉 @php_lib
Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например, при регистрации и создании панели администратора)?
Обратите внимание на функцию
Password::defaults(). Ознакомьтесь со всеми правилами в документации: https://github.com/illuminate/validation/blob/master/Rules/Password.php
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🧑💻 Пишете на PHP, упираетесь в производительность и всё чаще смотрите в сторону асинхронных решений? В какой-то момент вы столкнулись с ограничениями "короткоживущих" процессов и традиционного стека с PHP-FPM, особенно, при обработке "лёгких" запросов — нужны другие подходы к запуску и масштабированию приложений.
📖 На открытом уроке вы разберётесь, как устроен RoadRunner, в каких случаях он действительно даёт выигрыш и почему его выбирают для долгоживущих процессов и асинхронных задач. Мы покажем простой пример работы и разложим по полочкам сценарии применения.
❗️ Занятие будет полезно PHP-разработчикам, которые думают о производительных и асинхронных сервисах, хотят лучше понимать архитектуру и варианты горизонтального масштабирования. Вы получите конкретные идеи, как можно пересобрать свой подход к backend-части.
▶️ Встречаемся 23 декабря в 20:00 МСК в преддверие старта курса «PHP Developer. Professional»: https://vk.cc/cSrDOq
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Laravel разработчики, упростите загрузку файлов с этим инструментом! 💎
Используйте
Совет: Настройте имя файла и заголовки для большего контроля.
📲 Мы в MAX
👉 @php_lib
Используйте
Storage::download(), чтобы принудительно запустить скачивание файла в браузере. Отлично подходит для защищенных файлов или генерации динамических загрузок.Совет: Настройте имя файла и заголовки для большего контроля.
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Media is too big
VIEW IN TELEGRAM
Полный курс Laravel Swagger. REST API Laravel
00:00:00 Введение
00:04:25 Делаем заготовку
00:16:20 Установка Swagger
00:22:18 Общие аннотации и настройки Swagger
00:28:01 CRUD со Swagger
01:03:03 Установка JWT Auth
01:13:08 Авторизация и защищенные роуты в Swagger
01:20:20 Бонус. Нестандартные тело запроса и ответа
источник
📲 Мы в MAX
👉 @php_lib
00:00:00 Введение
00:04:25 Делаем заготовку
00:16:20 Установка Swagger
00:22:18 Общие аннотации и настройки Swagger
00:28:01 CRUD со Swagger
01:03:03 Установка JWT Auth
01:13:08 Авторизация и защищенные роуты в Swagger
01:20:20 Бонус. Нестандартные тело запроса и ответа
источник
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
This media is not supported in your browser
VIEW IN TELEGRAM
🐘 PHP 8.5 выходит, а вы всё ещё не разобрались, какие фичи реально поменяют код, а какие останутся в релиз-нотах?
📖 На открытом уроке мы разберём, что именно вошло в релиз, какие изменения затронут ваш повседневный код и инфраструктуру, а какие можно отложить. Посмотрим на ключевые нововведения, изменения в языке и поведении, обсудим, как аккуратно внедрять их в проект.
❗️ Урок будет полезен практикующим PHP-разработчикам, которые хотят писать современный код, готовиться к обновлению продакшен-окружения и понимать, куда развивается стек. Вы получите структурированную выжимку вместо бесконечного чтения разрозненных статей.
▶️ Встречаемся 14 января в 20:00 МСК в преддверие старта курса «PHP Developer. Professional»https://vk.cc/cTkeTh
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Индексы в PostgreSQL/MySQL. Что мы забываем?
Ты добавил индекс, но запрос всё равно тормозит. Почему?
База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для проверки перед деплоем миграции.
📋 Чеклист по индексам:
1. Cardianlity (Селективность): Индекс по полю
2. Порядок в составном индексе: Правило «слева направо».
💜 Индекс
💜 Но НЕ сработает эффективно для
3. Функции убивают индекс:
💜
💜
4. LIKE с процентом в начале:
💜
💜
5. Типы данных: Сравнение строки с числом (неявное приведение) может отключить использование индекса.
Совет: Всегда делайте
#database #sql #optimization #mysql #postgres
📲 Мы в MAX
👉 @php_lib
Ты добавил индекс, но запрос всё равно тормозит. Почему?
База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для проверки перед деплоем миграции.
📋 Чеклист по индексам:
1. Cardianlity (Селективность): Индекс по полю
gender (M / F) почти бесполезен. Базе проще прочитать всю таблицу (Full Scan), чем прыгать по индексу, который отсеет всего 50% записей.2. Порядок в составном индексе: Правило «слева направо».
(group_id, status) сработает для WHERE group_id = 5.WHERE status = active.3. Функции убивают индекс:
WHERE YEAR(created_at) = 2026 - индекс по created_at игнорируется.WHERE created_at >= '2026-01-01' - индекс работает.4. LIKE с процентом в начале:
LIKE '%text' - Full Scan. Индекс бесполезен.LIKE 'text%' - Range Scan. Индекс работает.5. Типы данных: Сравнение строки с числом (неявное приведение) может отключить использование индекса.
Совет: Всегда делайте
EXPLAIN (или EXPLAIN ANALYZE) на сложных запросах перед выкаткой. Доверяй, но проверяй.#database #sql #optimization #mysql #postgres
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5💯1
This media is not supported in your browser
VIEW IN TELEGRAM
🧑💻 Пишете на PHP, но всё чаще появляются задачи, где стандартного стека не хватает? Интенсивные вычисления, интеграции с нативным кодом, необходимость выжать максимум из железа — здесь в игру входят FFI и WASM.
📖 На открытом уроке поговорим о сценариях применения, типичных задачах, для которых подключают FFI или WebAssembly, и разберём реальные примеры.
❗️ Вы увидите, какие преимущества дают FFI и WASM с точки зрения производительности и гибкости и архитектуры, а также с какими рисками и ограничениями придётся считаться. Это полезно тем, кто хочет выходить за рамки классического PHP и понимать, какие инструменты есть над фреймворками.
▶️ Встречаемся 26 января в 20:00 МСК в преддверие старта курса «PHP Developer. Professional». Регистрация открыта: https://vk.cc/cTqyNa
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда DDD вам НЕ нужен (и когда нужен)
DDD - это не про структуру папок. Это про борьбу со сложностью.
Самая большая ловушка: прочитав Эванса или Вернона, начать пихать DDD в простой CRUD. Если ваше приложение просто перекладывает JSON из запроса в базу, DDD сделает разработку в 3 раза дороже и медленнее.
🚦 Когда DDD избыточен:
💜 Админки, простые CMS.
💜 Микросервисы-прокси.
💜 Прототипы (MVP), которые нужно выкинуть через месяц.
🔥 Когда DDD необходим:
💜 Сложный бизнес-процесс: (например, расчет налога с учетом льгот, региона и фазы луны).
💜 Долгоживущий проект: (вы будете поддерживать это 3+ года).
💜 Важность языка: Когда менеджер говорит «списать бонус», а в коде это
Главный принцип:
DDD применяется не ко всему проекту целиком, а к Core Domain (Ядру). Вспомогательные модули (отправка почты, логи) могут и должны оставаться простыми.
Вывод: Не стройте "Звезду Смерти" для доставки пиццы. Сложность архитектуры должна соответствовать сложности бизнеса.
Ставь ❤️, если видел "Hello World" на DDD с 15 интерфейсами.
#ddd #architecture #php #strategy
📲 Мы в MAX
👉 @php_lib
DDD - это не про структуру папок. Это про борьбу со сложностью.
Самая большая ловушка: прочитав Эванса или Вернона, начать пихать DDD в простой CRUD. Если ваше приложение просто перекладывает JSON из запроса в базу, DDD сделает разработку в 3 раза дороже и медленнее.
🚦 Когда DDD избыточен:
🔥 Когда DDD необходим:
$user->points -= 10. Это рассинхрон, который приведет к багам. В DDD это будет $user->debitBonuses(10).Главный принцип:
DDD применяется не ко всему проекту целиком, а к Core Domain (Ядру). Вспомогательные модули (отправка почты, логи) могут и должны оставаться простыми.
Вывод: Не стройте "Звезду Смерти" для доставки пиццы. Сложность архитектуры должна соответствовать сложности бизнеса.
Ставь ❤️, если видел "Hello World" на DDD с 15 интерфейсами.
#ddd #architecture #php #strategy
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4
Value Objects (Объекты-значения) - самый быстрый выигрыш
Хватит страдать от «Primitive Obsession»!
В большинстве легаси-проектов я вижу такое:
Что тут не так?
1.
2. Валидация размазана по контроллерам и сервисам.
3. Логика (например, форматирование телефона) дублируется.
✅ Внедряем Value Object:
В чем профит:
💜 Гарантия: Если у тебя в руках объект
💜 Инкапсуляция: Логика живет внутри класса, а не в
💜 Immutability: Value Object нельзя изменить, можно только создать новый. Это спасает от сайд-эффектов.
Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код.
Напишите в комментах, для чего вы уже используете VO? 👇
#ddd #valueobjects #refactoring #php82
📲 Мы в MAX
👉 @php_lib
Хватит страдать от «Primitive Obsession»!
В большинстве легаси-проектов я вижу такое:
function register(string $email, string $phone, float $amount)Что тут не так?
1.
string $email - это просто набор байт. Там может быть "asdf", и PHP это проглотит.2. Валидация размазана по контроллерам и сервисам.
3. Логика (например, форматирование телефона) дублируется.
✅ Внедряем Value Object:
readonly class Email
{
public string $value;
public function __construct(string $value)
{
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException("Invalid email format");
}
$this->value = strtolower($value); // Нормализация
}
public function getDomain(): string
{
return explode('@', $this->value)[1];
}
}
// Теперь сигнатура метода говорит правду:
function register(Email $email, Phone $phone, Money $amount) { ... }
В чем профит:
Email, он 100% валиден. Не надо проверять это снова.Helper::formatPhone().Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код.
Напишите в комментах, для чего вы уже используете VO? 👇
#ddd #valueobjects #refactoring #php82
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6