Совет по Laravel
Когда вы развёртываете изменения, пользователи могут столкнуться с недоступностью сайта.
Вы можете отобразить общую страницу «обслуживания», запустив команду
Также флаг
Наконец, вы можете кастомизировать страницу обслуживания, определив свой шаблон в
Подробнее в документации:
https://laravel.com/docs/12.x/configuration#maintenance-mode
👉 @PHPgx
Когда вы развёртываете изменения, пользователи могут столкнуться с недоступностью сайта.
Вы можете отобразить общую страницу «обслуживания», запустив команду
php artisan down перед деплоем и php artisan up после него.Также флаг
--refresh=15 будет автоматически обновлять эту страницу каждые 15 секунд, чтобы проверить, остаётся ли сайт в режиме обслуживания. Если нет — будет отображена обычная страница проекта.Наконец, вы можете кастомизировать страницу обслуживания, определив свой шаблон в
resources/views/errors/503.blade.php.Подробнее в документации:
https://laravel.com/docs/12.x/configuration#maintenance-mode
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍1
Новое в Laravel 12: больше не нужно вызывать
Вместо этого используйте новые методы
Теперь Laravel автоматически определяет соответствующие классы ресурсов
Ссылка на документацию: https://laravel.com/docs/12.x/eloquent-resources
👉 @PHPgx
new Resource() или Resource::collection().Вместо этого используйте новые методы
toResource() и toResourceCollection().Теперь Laravel автоматически определяет соответствующие классы ресурсов
Ссылка на документацию: https://laravel.com/docs/12.x/eloquent-resources
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥3
Ошибки неизбежны в любом приложении — они всегда будут возникать на вашем пути.
Поэтому все языки программирования предоставляют трассировку стека и сообщение об ошибке, чтобы вы могли отладить код и выяснить коренную причину проблемы.
Но иногда такие сообщения могут непреднамеренно раскрывать конфиденциальные данные вашего приложения.
Именно по этой причине в PHP был введён атрибут
Смотрите пример выше
👉 @PHPgx
Поэтому все языки программирования предоставляют трассировку стека и сообщение об ошибке, чтобы вы могли отладить код и выяснить коренную причину проблемы.
Но иногда такие сообщения могут непреднамеренно раскрывать конфиденциальные данные вашего приложения.
Именно по этой причине в PHP был введён атрибут
SensitiveParameter, чтобы вы могли скрыть такие параметры из трассировки стека и логов ошибок.Смотрите пример выше
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3
В сегодняшнем релизе Laravel появилась возможность отображать атрибуты Eloquent, приведённые к коллекции, в конкретный объект
👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🤔2
Совет по Laravel
Используйте
Шаблон URL будет таким: /photos/{photo}/comments/{comment}
Ссылка на документацию: https://laravel.com/docs/12.x/controllers#restful-nested-resources
👉 @PHPgx
Используйте
Route::resource('photos.comments', CommentController::class), чтобы автоматически сгенерировать ВЛОЖЕННЫЕ маршруты ресурсов.Шаблон URL будет таким: /photos/{photo}/comments/{comment}
Ссылка на документацию: https://laravel.com/docs/12.x/controllers#restful-nested-resources
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Новый пакет: Laravel Console Timer
https://github.com/mc0de/console-timer
Простой трейт, который добавляет отслеживание времени выполнения к вашим консольным командам в Laravel.
Полезен для:
🔹 Отслеживания времени выполнения команд
🔹 Измерения времени выполнения отдельных операций внутри команд
👉 @PHPgx
https://github.com/mc0de/console-timer
Простой трейт, который добавляет отслеживание времени выполнения к вашим консольным командам в Laravel.
Полезен для:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
В PHP 8.5 появятся две новые функции для работы с массивами —
Подробнее: https://amitmerchant.com/array-first-last-php-85/
👉 @PHPgx
array_first() и array_last() — для удобного получения соответственно первого и последнего значения массиваПодробнее: https://amitmerchant.com/array-first-last-php-85/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥6👍5👎1
Совет по Laravel
Нужно жадно загрузить связи, но при этом выбрать только определённые столбцы?
Используйте метод
Ссылка на документацию: https://laravel.com/docs/12.x/eloquent-relationships#eager-loading-specific-columns
👉 @PHPgx
Нужно жадно загрузить связи, но при этом выбрать только определённые столбцы?
Используйте метод
with() с указанием нужных столбцов, чтобы сократить использование памяти и размер запроса при работе с большими объёмами данных.Ссылка на документацию: https://laravel.com/docs/12.x/eloquent-relationships#eager-loading-specific-columns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
Вы можете просто вложить блок
Это аккуратно, чисто и очень читаемо.
👉 @PHPgx
match в PHP, если вам нужна немного большая точность для группы совпаденийЭто аккуратно, чисто и очень читаемо.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤8
Composer Package Executor
Это CLI-инструмент, который позволяет выполнять любую команду из любого Composer-пакета, даже если этот пакет не установлен в вашем проекте.
По сути, это как npx, но для Composer
https://github.com/imliam/cpx
👉 @PHPgx
Это CLI-инструмент, который позволяет выполнять любую команду из любого Composer-пакета, даже если этот пакет не установлен в вашем проекте.
По сути, это как npx, но для Composer
https://github.com/imliam/cpx
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4
Новое в Symfony 7.3: компонент
Во многих Symfony-приложениях часто используют DTO-объекты для переноса данных между слоями. Например, вы можете создать DTO на основе Doctrine-сущности, изменить его с помощью Symfony Form, а затем снова замапить обновлённые данные в сущность.
Код для маппинга DTO обратно в сущность часто выглядит так:
Это утомительно и подвержено ошибкам. Поэтому в Symfony 7.3 введён новый компонент ObjectMapper для переноса данных между объектами. С его помощью предыдущий пример становится намного проще:
Подробнее:
https://symfony.com/blog/new-in-symfony-7-3-objectmapper-component
👉 @PHPgx
ObjectMapperВо многих Symfony-приложениях часто используют DTO-объекты для переноса данных между слоями. Например, вы можете создать DTO на основе Doctrine-сущности, изменить его с помощью Symfony Form, а затем снова замапить обновлённые данные в сущность.
Код для маппинга DTO обратно в сущность часто выглядит так:
$user = new User();
$user->name = $dto->name;
$user->email = $dto->email;
$user->roles = ['ROLE_USER'];
// …
Это утомительно и подвержено ошибкам. Поэтому в Symfony 7.3 введён новый компонент ObjectMapper для переноса данных между объектами. С его помощью предыдущий пример становится намного проще:
// при создании нового объекта на основе другого
$user = $mapper->map($dto, User::class);
// при обновлении существующего объекта другим объектом
$mapper->map($dto, $user);
Подробнее:
https://symfony.com/blog/new-in-symfony-7-3-objectmapper-component
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍6
https://wiki.php.net/rfc/pipe-operator-v3
#php
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍5🤔4👎1
FrankenPHP теперь официально поддерживается Фондом PHP.
Репозиторий проекта будет перенесён в организацию PHP на GitHub
👉 @PHPgx
Репозиторий проекта будет перенесён в организацию PHP на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤4👍3🤔2
Задумывались, как работает загрузка файлов в PHP? 🤔
Когда пользователь отправляет файл, PHP предоставляет специальный массив
👉 @PHPgx
Когда пользователь отправляет файл, PHP предоставляет специальный массив
$_FILES с именем, размером, типом и временным местоположением файла.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👀2👎1🤯1🌭1
Совет по Laravel
Знали ли вы, что значения по умолчанию для столбцов базы данных можно задавать не только на уровне базы данных в миграциях, но и на уровне Eloquent-модели с помощью свойства
Ссылка на документацию: https://laravel.com/docs/12.x/eloquent#default-attribute-values
👉 @PHPgx
Знали ли вы, что значения по умолчанию для столбцов базы данных можно задавать не только на уровне базы данных в миграциях, но и на уровне Eloquent-модели с помощью свойства
$attributes?Ссылка на документацию: https://laravel.com/docs/12.x/eloquent#default-attribute-values
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5
Ускорьте работу Laravel: Мой запрос стал выполняться на 30 секунд быстрее
Я заменил
— и запрос стал выполняться на 30 секунд быстрее.
Таблица, по которой выполнялся поиск, содержала более 800 тысяч записей.
Вот 10 быстрых способов оптимизировать запросы в Laravel:
🔹 Используйте
— быстрее и эффективнее.
🔹 Замените
— экономит память.
🔹 Выбирайте только нужные столбцы через
— избегайте
🔹 Обрабатывайте большие объемы данных по частям через
— не загружайте всё сразу.
🔹 Используйте
— быстрее при выборке одного столбца.
🔹 Проверяйте наличие записей через
🔹 Используйте
— меньше запросов.
🔹 Пагинируйте результаты через
— не загружайте все данные сразу.
🔹 Кэшируйте часто используемые запросы через
— снижает нагрузку на базу данных.
🔹 Избегайте жадной загрузки в циклах, используйте
— эффективная загрузка связей.
Каждая миллисекунда имеет значение.
Небольшие изменения = значительный прирост производительности✌️
👉 @PHPgx
Я заменил
whereNotIn() на leftJoin()— и запрос стал выполняться на 30 секунд быстрее.
Таблица, по которой выполнялся поиск, содержала более 800 тысяч записей.
Вот 10 быстрых способов оптимизировать запросы в Laravel:
leftJoin() вместо whereNotIn()— быстрее и эффективнее.
whereIn() на whereExists()— экономит память.
select()— избегайте
User::all().chunk()— не загружайте всё сразу.
pluck() вместо get()— быстрее при выборке одного столбца.
exists() вместо count() > 0.upsert() вместо updateOrInsert()— меньше запросов.
paginate()— не загружайте все данные сразу.
cache()— снижает нагрузку на базу данных.
load()— эффективная загрузка связей.
Каждая миллисекунда имеет значение.
Небольшие изменения = значительный прирост производительности
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🤔4❤2🔥2👎1