Библиотека PHP программиста 👨🏼‍💻👩‍💻 – Telegram
Библиотека PHP программиста 👨🏼‍💻👩‍💻
2.16K subscribers
370 photos
171 videos
7 files
375 links
Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon

По всем вопросам @evgenycarter
Download Telegram
Совет по Laravel💡

Знаете ли вы... В Laravel есть метод withProgressBar(), который позволяет добавлять прогресс-бары к консольным командам.

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Совет по Laravel💡

Если вы хотите автоматически удалять старые записи, воспользуйтесь трейтом Prunable. Не нужно писать собственные команды.

#Laravel

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Совет по Laravel💡

Уникальные идентификаторы запросов

Вам когда-нибудь требовалось создать код уникального идентификатора для запроса, например, для целей кэширования? Laravel поставляется с методом «fingerprint», который позволяет вам генерировать уникальный идентификатор для ваших запросов 🚀

#laravel

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Совет по PHP

Очень простой, но очень важный:

1. Всегда определяйте, какой тип значения будет возвращать ваша функция. (I узнал об этом из Java ☕️ )
2. Всегда сохраняйте резервное значение в конце функции. Это обеспечит стабильность вашего кода. 💪

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎1🤔1
Совет по Laravel 💡

🛠️ Создайте собственные директивы Blade для часто используемых блоков кода в файлах представлений.

🧹 Это сделает ваши представления чище и проще в работе.

💁‍♂️ В качестве примера делюсь своей любимой пользовательской директивой Blade

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔1
Совет по PHP/Laravel 💡

Вместо того чтобы выполнять цикл foreach по массиву для поиска значения записи, вы можете использовать метод Laravel Collection contains().

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👎4
Совет по PHP/Laravel 💡

Вместо того чтобы выполнять цикл foreach по массиву для поиска значения записи, вы можете использовать метод Laravel Collection contains().

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
💊4👍2
Привет, разработчики Laravel 👩‍💻

Начиная с Laravel v11.18.0, в методе Str::limit() появился новый параметр preserveWords.

Пример использования метода limit() — отображение предварительных версий текстового контента, таких как резюме или отрывки блог-постов.

Раньше при использовании метода limit он мог разрывать слова посередине.

Теперь мы можем передать параметр preserveWords как true, и Laravel умно применит ограничение так, чтобы последнее слово было полным.

Это может улучшить пользовательский опыт для некоторых приложений.

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Совет по Laravel 💡

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

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

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

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Совет Laravel 🔥

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

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
This media is not supported in your browser
VIEW IN TELEGRAM
Совет по Laravel 💡

Один из моих любимых недокументированных советов, который я регулярно использую. Используйте "wasRecentlyCreated", чтобы проверить, была ли модель создана или найдена в базе данных.

📲 Мы в MAX

👉 @php_lib
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по Laravel💡

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

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

Используйте DB::listen() с toRawSql()!

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Laravel разработчики, упростите загрузку файлов с этим инструментом! 💎

Используйте Storage::download(), чтобы принудительно запустить скачивание файла в браузере. Отлично подходит для защищенных файлов или генерации динамических загрузок.

Совет: Настройте имя файла и заголовки для большего контроля.

📲 Мы в MAX

👉 @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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Нужно кэшировать тяжелые вычисления в Laravel?

Используй помощник once, который выполняет обратный вызов один раз и кэширует результат.

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Чтение JSON-файлов в Laravel - проще простого

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Индексы в 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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда 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
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4