fa
Feedback
Библиотека PHP программиста 👨🏼‍💻👩‍💻

Библиотека PHP программиста 👨🏼‍💻👩‍💻

رفتن به کانال در Telegram

Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon По всем вопросам @evgenycarter

نمایش بیشتر
2 096
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-730 روز
آرشیو پست ها
Value Objects (Объекты-значения) - самый быстрый выигрыш Хватит страдать от «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(). 💜Immutability: Value Object нельзя изменить, можно только создать новый. Это спасает от сайд-эффектов. Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код. Напишите в комментах, для чего вы уже используете VO? 👇 #ddd #valueobjects #refactoring #php82 📲 Мы в MAX 👉 @php_lib

Когда DDD вам НЕ нужен (и когда нужен) DDD - это не про структуру папок. Это про борьбу со сложностью. Самая большая ловушка: прочитав Эванса или Вернона, начать пихать DDD в простой CRUD. Если ваше приложение просто перекладывает JSON из запроса в базу, DDD сделает разработку в 3 раза дороже и медленнее. 🚦 Когда DDD избыточен: 💜Админки, простые CMS. 💜Микросервисы-прокси. 💜Прототипы (MVP), которые нужно выкинуть через месяц. 🔥 Когда DDD необходим: 💜Сложный бизнес-процесс: (например, расчет налога с учетом льгот, региона и фазы луны). 💜Долгоживущий проект: (вы будете поддерживать это 3+ года). 💜Важность языка: Когда менеджер говорит «списать бонус», а в коде это $user->points -= 10. Это рассинхрон, который приведет к багам. В DDD это будет $user->debitBonuses(10). Главный принцип: DDD применяется не ко всему проекту целиком, а к Core Domain (Ядру). Вспомогательные модули (отправка почты, логи) могут и должны оставаться простыми. Вывод: Не стройте "Звезду Смерти" для доставки пиццы. Сложность архитектуры должна соответствовать сложности бизнеса. Ставь ❤️, если видел "Hello World" на DDD с 15 интерфейсами. #ddd #architecture #php #strategy 📲 Мы в MAX 👉 @php_lib

🧑‍💻 Пишете на PHP, но всё чаще появляются задачи, где стандартного стека не хватает? Интенсивные вычисления, интеграции с нативным кодом, необходимость выжать максимум из железа — здесь в игру входят FFI и WASM. 📖 На открытом уроке поговорим о сценариях применения, типичных задачах, для которых подключают FFI или WebAssembly, и разберём реальные примеры. ❗️ Вы увидите, какие преимущества дают FFI и WASM с точки зрения производительности и гибкости и архитектуры, а также с какими рисками и ограничениями придётся считаться. Это полезно тем, кто хочет выходить за рамки классического PHP и понимать, какие инструменты есть над фреймворками. ▶️ Встречаемся 26 января в 20:00 МСК в преддверие старта курса «PHP Developer. Professional». Регистрация открыта: https://vk.cc/cTqyNa Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Индексы в PostgreSQL/MySQL. Что мы забываем? Ты добавил индекс, но запрос всё равно тормозит. Почему? База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для проверки перед деплоем миграции. 📋 Чеклист по индексам: 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 📲 Мы в MAX 👉 @php_lib

Чтение JSON-файлов в Laravel - проще простого 📲 Мы в MAX 👉 @php_lib
Чтение JSON-файлов в Laravel - проще простого 📲 Мы в MAX 👉 @php_lib

Нужно кэшировать тяжелые вычисления в Laravel? Используй помощник once, который выполняет обратный вызов один раз и кэширует
Нужно кэшировать тяжелые вычисления в Laravel? Используй помощник once, который выполняет обратный вызов один раз и кэширует результат. 📲 Мы в MAX 👉 @php_lib

🐘 PHP 8.5 выходит, а вы всё ещё не разобрались, какие фичи реально поменяют код, а какие останутся в релиз-нотах? 📖 На открытом уроке мы разберём, что именно вошло в релиз, какие изменения затронут ваш повседневный код и инфраструктуру, а какие можно отложить. Посмотрим на ключевые нововведения, изменения в языке и поведении, обсудим, как аккуратно внедрять их в проект. ❗️ Урок будет полезен практикующим PHP-разработчикам, которые хотят писать современный код, готовиться к обновлению продакшен-окружения и понимать, куда развивается стек. Вы получите структурированную выжимку вместо бесконечного чтения разрозненных статей. ▶️ Встречаемся 14 января в 20:00 МСК в преддверие старта курса «PHP Developer. Professional»https://vk.cc/cTkeTh Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Полный курс 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

Laravel разработчики, упростите загрузку файлов с этим инструментом! 💎 Используйте Storage::download(), чтобы принудительно
Laravel разработчики, упростите загрузку файлов с этим инструментом! 💎 Используйте Storage::download(), чтобы принудительно запустить скачивание файла в браузере. Отлично подходит для защищенных файлов или генерации динамических загрузок. Совет: Настройте имя файла и заголовки для большего контроля. 📲 Мы в MAX 👉 @php_lib

Совет по Laravel💡 Хотите быстро вывести SQL-запросы, выполненные во время вашего запроса? И не хотите устанавливать Debugbar
Совет по Laravel💡 Хотите быстро вывести SQL-запросы, выполненные во время вашего запроса? И не хотите устанавливать Debugbar, Telescope и т.п.? Используйте DB::listen() с toRawSql()! 📲 Мы в MAX 👉 @php_lib

🧑‍💻 Пишете на PHP, упираетесь в производительность и всё чаще смотрите в сторону асинхронных решений? В какой-то момент вы столкнулись с ограничениями "короткоживущих" процессов и традиционного стека с PHP-FPM, особенно, при обработке "лёгких" запросов — нужны другие подходы к запуску и масштабированию приложений. 📖 На открытом уроке вы разберётесь, как устроен RoadRunner, в каких случаях он действительно даёт выигрыш и почему его выбирают для долгоживущих процессов и асинхронных задач. Мы покажем простой пример работы и разложим по полочкам сценарии применения. ❗️ Занятие будет полезно PHP-разработчикам, которые думают о производительных и асинхронных сервисах, хотят лучше понимать архитектуру и варианты горизонтального масштабирования. Вы получите конкретные идеи, как можно пересобрать свой подход к backend-части. ▶️ Встречаемся 23 декабря в 20:00 МСК в преддверие старта курса «PHP Developer. Professional»: https://vk.cc/cSrDOq Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Совет по Laravel 💡 Один из моих любимых недокументированных советов, который я регулярно использую. Используйте "wasRecentlyCreated", чтобы проверить, была ли модель создана или найдена в базе данных. 📲 Мы в MAX 👉 @php_lib

Совет Laravel 🔥 В конструктор запросов Laravel входит функция lockForUpdate(). Она останавливает любые обновления или другую
Совет Laravel 🔥 В конструктор запросов Laravel входит функция lockForUpdate(). Она останавливает любые обновления или другую общую блокировку выбранной записи до тех пор, пока транзакция не будет завершена. 📲 Мы в MAX 👉 @php_lib

Совет по Laravel 💡 Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например,
Совет по Laravel 💡 Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например, при регистрации и создании панели администратора)? Обратите внимание на функцию Password::defaults(). Ознакомьтесь со всеми правилами в документации: https://github.com/illuminate/validation/blob/master/Rules/Password.php 📲 Мы в MAX 👉 @php_lib

Привет, разработчики Laravel 👩‍💻 Начиная с Laravel v11.18.0, в методе Str::limit() появился новый параметр preserveWords. П
Привет, разработчики Laravel 👩‍💻 Начиная с Laravel v11.18.0, в методе Str::limit() появился новый параметр preserveWords. Пример использования метода limit() — отображение предварительных версий текстового контента, таких как резюме или отрывки блог-постов. Раньше при использовании метода limit он мог разрывать слова посередине. Теперь мы можем передать параметр preserveWords как true, и Laravel умно применит ограничение так, чтобы последнее слово было полным. Это может улучшить пользовательский опыт для некоторых приложений. 📲 Мы в MAX 👉 @php_lib

Совет по PHP/Laravel 💡 Вместо того чтобы выполнять цикл foreach по массиву для поиска значения записи, вы можете использоват
Совет по PHP/Laravel 💡 Вместо того чтобы выполнять цикл foreach по массиву для поиска значения записи, вы можете использовать метод Laravel Collection contains(). 📲 Мы в MAX 👉 @php_lib

Совет по PHP/Laravel 💡 Вместо того чтобы выполнять цикл foreach по массиву для поиска значения записи, вы можете использоват
Совет по PHP/Laravel 💡 Вместо того чтобы выполнять цикл foreach по массиву для поиска значения записи, вы можете использовать метод Laravel Collection contains(). 📲 Мы в MAX 👉 @php_lib

Совет по Laravel 💡 🛠️ Создайте собственные директивы Blade для часто используемых блоков кода в файлах представлений. 🧹 Эт
Совет по Laravel 💡 🛠️ Создайте собственные директивы Blade для часто используемых блоков кода в файлах представлений. 🧹 Это сделает ваши представления чище и проще в работе. 💁‍♂️ В качестве примера делюсь своей любимой пользовательской директивой Blade 📲 Мы в MAX 👉 @php_lib

✨ Совет по PHP ✨ Очень простой, но очень важный: 1. Всегда определяйте, какой тип значения будет возвращать ваша функция. (I
✨ Совет по PHP ✨ Очень простой, но очень важный: 1. Всегда определяйте, какой тип значения будет возвращать ваша функция. (I узнал об этом из Java ☕️ ) 2. Всегда сохраняйте резервное значение в конце функции. Это обеспечит стабильность вашего кода. 💪 📲 Мы в MAX 👉 @php_lib

Совет по Laravel💡 Уникальные идентификаторы запросов Вам когда-нибудь требовалось создать код уникального идентификатора для
Совет по Laravel💡 Уникальные идентификаторы запросов Вам когда-нибудь требовалось создать код уникального идентификатора для запроса, например, для целей кэширования? Laravel поставляется с методом «fingerprint», который позволяет вам генерировать уникальный идентификатор для ваших запросов 🚀 #laravel 📲 Мы в MAX 👉 @php_lib