PHP Portal | Программирование
4.85K subscribers
408 photos
20 videos
2 files
209 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для PHP-разработчика

Связь: @devmangx
Download Telegram
Мега-совет по PHP: используйте #[SensitiveParameter] для чувствительных параметров.
PHP скроет их значение в стектрейсах, сообщениях об ошибках и логах..

Это предотвращает случайные утечки секретов на проде. Абсолютный шедевр.

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥16
Совет по filamentphp

Преобразуйте строки таблицы в сетку с помощью $table->contentGrid(). Отлично подходит для UI в стиле карточек или когда список выглядит слишком тесным.

На мобильных = 1 колонка
Начиная с md = 2 колонки
Начиная с xl = 3 колонки

Ссылка на доку: https://filamentphp.com/docs/4.x/tables/layout#arranging-records-into-a-grid

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥3
Совет по filamentphp

Группируйте по датам, а не по полным таймстампам. Применяйте date() к группе для более чистых ежедневных сводок

Ссылка на доку: https://filamentphp.com/docs/4.x/tables/grouping#date-groups

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Иногда столбец в БД не нужен

Для одноразовых значений вроде токенов подтверждения email или OTP → просто закешируй их.

🔹Автоистечение
🔹Чище схема
🔹Без лишних столбцов

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
PHP-разработчики, когда слышат «PHP мёртв»… 😁

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
😁278👍4
Болезненный урок, который я продолжаю усваивать, выполняя задачи по миграции данных в проде: нужно заранее убедиться, что изменённые записи можно легко отследить в том или ином виде

Если облажаться со скриптом миграции (а у меня такое бывало), то хотя бы можно сделать выборку из базы по всем записям с одинаковым значением поля updated_at, чтобы начать процесс восстановления или отката данных к исходному состоянию и попробовать снова.

Вероятность того, что у записей будет точно одинаковый updated_at, довольно мала, поэтому это простой и универсальный способ, который работает со всеми моделями.

Конечно, можно использовать механизмы защиты, такие как транзакции в БД, но это не панацея, если не выбрасывается исключение, транзакция не откатывается. Кроме того, таблица может быть слишком большой или слишком активно использоваться, чтобы пытаться заблокировать её целиком.

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

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
6🌭2👎1
Совет по Laravel

Можно избежать проблем при выполнении операций с базой данных, используя метод DB::afterCommit()

В примере мы избегаем ситуации с «осиротевшим» файлом, если создание инвойса в БД завершается ошибкой

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥3👎1
Совет по filamentphp

Пустая таблица? Нет данных? В пустом состоянии по центру просто будет показано «No posts».

Но вы можете добавить ACTIONS к пустому состоянию, чтобы побудить пользователей к действию.
Передайте их методу emptyStateActions().

Документация: https://filamentphp.com/docs/4.x/tables/empty-state#adding-empty-state-actions

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥3
За последние две недели в Laravel вышло несколько классных фич

- Во-первых, новый метод Http::batch() позволяет выполнять параллельные HTTP-запросы, а также прикреплять колбэки, которые будут вызываться при прогрессе, ошибках, завершении и других событиях.

Документация: https://laravel.com/docs/12.x/http-client#request-batching

- Далее, добавил поддержку rate-лимитеров на основе ответа.. Это полезно, когда вы хотите учитывать в лимите только определённые ответы, например, ошибки валидации, 404, или другие конкретные HTTP-коды.

Документация: https://laravel.com/docs/12.x/routing#response-base-rate-limiting

- Ещё была добавлена дополнительная поддержка SQS FIFO-очередей для очередных слушателей, почты и уведомлений.

Документация: https://laravel.com/docs/12.x/queues#fifo-listeners-mail-and-notifications

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115
Этот пакет выручит вас, если нужно экспортировать большой объём данных

Он экспортирует 10 000 строк за 3 секунды, используя меньше 3 МБ памяти.

Лучшее решение с точки зрения производительности.

Познакомьтесь с rap2hpoutre/fast-excel

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131🤔1
PHP 8.5 представляет новое расширение URI, которое является стандартам-соответствующим парсером как для RFC 3986, так и для стандарта WHATWG URL, и теперь доступно в стандартной библиотеке PHP как часть нового расширения "URI".

В RFC приведено множество примеров, но вот один из поста с анонсом от PHP Foundation, демонстрирующий класс Uri согласно RFC 3986

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥9👍3🎉3🤔2
Самый простой способ преобразовать ваши HTTP-запросы в MySQL-запросы

включая:
- фильтрацию
- сортировку
- связи
- выборку отдельных полей

знакомьтесь — пакет spatie/laravel-query-builder

только посмотрите на эту красоту:

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👎11👍6👀21
Совет по Laravel

Сегодня короткий совет о том, что появилось недавно в релизе Laravel 12.34

Теперь вы можете использовать Http::batch(...)->defer(), если вам не важен результат HTTP-запросов. В таком случае пакет запросов будет выполнен уже после того, как ответ отправлен пользователю, что позволяет вашему приложению оставаться быстрым и отзывчивым

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
7
А ты знал, что можно создавать свои кастомные artisan-команды-генераторы для классов?

Если ты регулярно создаёшь один и тот же тип классов (например, DTO), возможно, стоит обратить на это внимание

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95
В продакшене всегда нужно принудительно использовать HTTPS. Вот как это сделать в Laravel:

- Убедитесь, что все генерируемые ссылки используют https (настраивается через фасад URL)
- Настройте редирект пользователей с http на https (с помощью middleware)

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👎64👍3
Если вы хотите организовать свой Laravel-проект по модульной структуре, есть два хорошо известных пакета:

- nwidart/laravel-modules
- internachi/modular

В чём ключевые различия?

Я бы выделил два момента:

🔹Пакет nwidart при использовании команды module:make генерирует больше файлов, включая нестандартные и довольно «мнение-ориентированные» файлы, создаваемые командами вроде module:make-model и подобными. Поэтому, если вам не нравится предлагаемая структура, придётся потратить время на правки или удаление лишнего. Пакет internachi генерирует минимально необходимый набор файлов.

🔹Пакет internachi регистрирует модули практически как Laravel-пакеты, благодаря чему их можно переиспользовать в других проектах. В то время как nwidart рассматривает модули как внутренние мини-приложения Laravel.

Так что оба решения хорошие, выбор зависит от конкретного сценария использования

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍4