После 13 лет разработки на PHP я только что понял, что существует управляющая конструкция под названием
Она пропускает ещё и внешний цикл.
У меня просто взорвался мозг🤯
Как думаете, это хорошо или плохо?
👉 @PHPgx
continue 2.Она пропускает ещё и внешний цикл.
У меня просто взорвался мозг
Как думаете, это хорошо или плохо?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28😁4❤3
Работаете с PHP Enum? Параметры маршрута могут автоматически валидировать и инжектить значения Enum
Laravel вернёт 404 для некорректных значений Enum, так что контроллеры остаются чистыми.
Ссылка на документацию: https://laravel.com/docs/12.x/routing#implicit-enum-binding
👉 @PHPgx
Laravel вернёт 404 для некорректных значений Enum, так что контроллеры остаются чистыми.
Ссылка на документацию: https://laravel.com/docs/12.x/routing#implicit-enum-binding
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥3👀2
Недавно вышел курс PHP Fundamentals - всё, что нужно знать о современном PHP в 10 коротких уроках. Идеально подходит для Laravel-разработчиков или для тех, кто хочет освоить PHP сегодня.
00:00 Why PHP?
01:41 Setup
03:50 Variables & Types
08:53 Arrays
15:48 Functions
21:10 Loops
31:15 Classes
43:35 Modern PHP
56:39 Composer
01:02:30 Your First PHP Application
Смотреть на YouTube
👉 @PHPgx
00:00 Why PHP?
01:41 Setup
03:50 Variables & Types
08:53 Arrays
15:48 Functions
21:10 Loops
31:15 Classes
43:35 Modern PHP
56:39 Composer
01:02:30 Your First PHP Application
Смотреть на YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🤯1
Совет по Laravel
Рейт-лимитинг иногда бывает непростым, верно? Но не в Laravel.
Посмотри, как просто применить rate limit для каждой команды и тарифного плана, с фоллбеком на IP
👉 @PHPgx
Рейт-лимитинг иногда бывает непростым, верно? Но не в Laravel.
Посмотри, как просто применить rate limit для каждой команды и тарифного плана, с фоллбеком на IP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3
Партиционирование таблиц в MySQL может существенно повысить производительность запросов за счёт разбивки больших таблиц на более мелкие физические файлы
👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
Привет, Laravel-разработчики
Вы наверняка знаете про метод
Начиная с Laravel v12.29.0 у нас появился новый метод
Простое, но отличное добавление в фреймворк. Что думаете об этом?
👉 @PHPgx
Вы наверняка знаете про метод
withoutGlobalScopes() в классе модели Eloquent, который отключает все глобальные скоупы у модели для текущего запроса.Начиная с Laravel v12.29.0 у нас появился новый метод
withoutGlobalScopesExcept(), который позволяет отключить все остальные скоупы, кроме указанных.Простое, но отличное добавление в фреймворк. Что думаете об этом?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Использование именованных конструкторов может сильно упростить создание исключений
«Чит-код», о котором я всё время забываю, и который делает это возможным - это возможность PHP-классов устанавливать protected/private свойства у экземпляров, созданных внутри самого класса. Это супер-удобно
Это избавляет от необходимости переопределять конструктор и даёт больше свободы добавлять новые именованные конструкторы в будущем
👉 @PHPgx
«Чит-код», о котором я всё время забываю, и который делает это возможным - это возможность PHP-классов устанавливать protected/private свойства у экземпляров, созданных внутри самого класса. Это супер-удобно
Это избавляет от необходимости переопределять конструктор и даёт больше свободы добавлять новые именованные конструкторы в будущем
Please open Telegram to view this post
VIEW IN TELEGRAM
👎5❤2👍2
Совет по работе с filamentphp
Действия для строк таблицы не обязательно должны располагаться в конце.
С помощью
Документация: https://filamentphp.com/docs/4.x/tables/actions#positioning-record-actions-before-columns
👉 @PHPgx
Действия для строк таблицы не обязательно должны располагаться в конце.
С помощью
RecordActionsPosition::BeforeColumns или BeforeCells их можно перенести перед данными или даже перед колонкой с чекбоксами.Документация: https://filamentphp.com/docs/4.x/tables/actions#positioning-record-actions-before-columns
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥5
Можно сгенерировать коллекцию Postman прямо из своих Laravel-роутов
Просто установи пакет
👉 @PHPgx
Просто установи пакет
laravel-postman и выполни вот этоPlease open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥3
Совет по Laravel
Нужно интегрироваться со сторонним сервисом? Поскольку HTTP-клиент в Laravel поддерживает макросы, можно определить под него отказоустойчивый HTTP-клиент с помощью макроса и использовать его по всему приложению
Смотри пример, чтобы узнать, как
👉 @PHPgx
Нужно интегрироваться со сторонним сервисом? Поскольку HTTP-клиент в Laravel поддерживает макросы, можно определить под него отказоустойчивый HTTP-клиент с помощью макроса и использовать его по всему приложению
Смотри пример, чтобы узнать, как
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Мега-совет по PHP: используйте
PHP скроет их значение в стектрейсах, сообщениях об ошибках и логах..
Это предотвращает случайные утечки секретов на проде. Абсолютный шедевр.✨
👉 @PHPgx
#[SensitiveParameter] для чувствительных параметров.PHP скроет их значение в стектрейсах, сообщениях об ошибках и логах..
Это предотвращает случайные утечки секретов на проде. Абсолютный шедевр.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥16
Совет по filamentphp
Преобразуйте строки таблицы в сетку с помощью
На мобильных = 1 колонка
Начиная с md = 2 колонки
Начиная с xl = 3 колонки
Ссылка на доку: https://filamentphp.com/docs/4.x/tables/layout#arranging-records-into-a-grid
👉 @PHPgx
Преобразуйте строки таблицы в сетку с помощью
$table->contentGrid(). Отлично подходит для UI в стиле карточек или когда список выглядит слишком тесным.На мобильных = 1 колонка
Начиная с md = 2 колонки
Начиная с xl = 3 колонки
Ссылка на доку: https://filamentphp.com/docs/4.x/tables/layout#arranging-records-into-a-grid
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3
Совет по filamentphp
Группируйте по датам, а не по полным таймстампам. Применяйте
Ссылка на доку: https://filamentphp.com/docs/4.x/tables/grouping#date-groups
👉 @PHPgx
Группируйте по датам, а не по полным таймстампам. Применяйте
date() к группе для более чистых ежедневных сводокСсылка на доку: https://filamentphp.com/docs/4.x/tables/grouping#date-groups
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
Иногда столбец в БД не нужен
Для одноразовых значений вроде токенов подтверждения email или OTP → просто закешируй их.
🔹 Автоистечение
🔹 Чище схема
🔹 Без лишних столбцов
👉 @PHPgx
Для одноразовых значений вроде токенов подтверждения email или OTP → просто закешируй их.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27❤8👍4
Болезненный урок, который я продолжаю усваивать, выполняя задачи по миграции данных в проде: нужно заранее убедиться, что изменённые записи можно легко отследить в том или ином виде
Если облажаться со скриптом миграции (а у меня такое бывало), то хотя бы можно сделать выборку из базы по всем записям с одинаковым значением поля
Вероятность того, что у записей будет точно одинаковый
Конечно, можно использовать механизмы защиты, такие как транзакции в БД, но это не панацея, если не выбрасывается исключение, транзакция не откатывается. Кроме того, таблица может быть слишком большой или слишком активно использоваться, чтобы пытаться заблокировать её целиком.
Полезно заранее продумывать худший сценарий и быть к нему готовым, когда приходится работать с продакшен-базами - на всякий случай
👉 @PHPgx
Если облажаться со скриптом миграции (а у меня такое бывало), то хотя бы можно сделать выборку из базы по всем записям с одинаковым значением поля
updated_at, чтобы начать процесс восстановления или отката данных к исходному состоянию и попробовать снова.Вероятность того, что у записей будет точно одинаковый
updated_at, довольно мала, поэтому это простой и универсальный способ, который работает со всеми моделями.Конечно, можно использовать механизмы защиты, такие как транзакции в БД, но это не панацея, если не выбрасывается исключение, транзакция не откатывается. Кроме того, таблица может быть слишком большой или слишком активно использоваться, чтобы пытаться заблокировать её целиком.
Полезно заранее продумывать худший сценарий и быть к нему готовым, когда приходится работать с продакшен-базами - на всякий случай
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🌭2👎1
Совет по Laravel
Можно избежать проблем при выполнении операций с базой данных, используя метод
В примере мы избегаем ситуации с «осиротевшим» файлом, если создание инвойса в БД завершается ошибкой
👉 @PHPgx
Можно избежать проблем при выполнении операций с базой данных, используя метод
DB::afterCommit()В примере мы избегаем ситуации с «осиротевшим» файлом, если создание инвойса в БД завершается ошибкой
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥3👎1
Совет по filamentphp
Пустая таблица? Нет данных? В пустом состоянии по центру просто будет показано «No posts».
Но вы можете добавить ACTIONS к пустому состоянию, чтобы побудить пользователей к действию.
Передайте их методу
Документация: https://filamentphp.com/docs/4.x/tables/empty-state#adding-empty-state-actions
👉 @PHPgx
Пустая таблица? Нет данных? В пустом состоянии по центру просто будет показано «No posts».
Но вы можете добавить ACTIONS к пустому состоянию, чтобы побудить пользователей к действию.
Передайте их методу
emptyStateActions().Документация: https://filamentphp.com/docs/4.x/tables/empty-state#adding-empty-state-actions
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥3