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
Новое в 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
https://wiki.php.net/rfc/pipe-operator-v3
#php
Please open Telegram to view this post
VIEW IN TELEGRAM
FrankenPHP теперь официально поддерживается Фондом PHP.
Репозиторий проекта будет перенесён в организацию PHP на GitHub
👉 @PHPgx
Репозиторий проекта будет перенесён в организацию PHP на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
Задумывались, как работает загрузка файлов в PHP? 🤔
Когда пользователь отправляет файл, PHP предоставляет специальный массив
👉 @PHPgx
Когда пользователь отправляет файл, PHP предоставляет специальный массив
$_FILES
с именем, размером, типом и временным местоположением файла.Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по 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
Ускорьте работу 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
Совет по Laravel.
Защитите ваше приложение от спамеров при регистрации.
Побочный эффект: если вы отправляете электронные письма при регистрации, это поможет избежать переполнения очереди email-уведомлений и лишних расходов на услуги почтового провайдера.
После достижения лимита пользователи/боты будут получать ошибку "429 Too Many Requests"
👉 @PHPgx
Защитите ваше приложение от спамеров при регистрации.
Побочный эффект: если вы отправляете электронные письма при регистрации, это поможет избежать переполнения очереди email-уведомлений и лишних расходов на услуги почтового провайдера.
После достижения лимита пользователи/боты будут получать ошибку "429 Too Many Requests"
Please open Telegram to view this post
VIEW IN TELEGRAM
Нашёл годный пакет Laravel
gecche/laravel-multidomain: для использования Laravel-приложения в многодоменной конфигурации
https://github.com/gecche/laravel-multidomain
Этот пакет предоставляет очень простой способ получить отдельный
👉 @PHPgx
gecche/laravel-multidomain: для использования Laravel-приложения в многодоменной конфигурации
https://github.com/gecche/laravel-multidomain
Этот пакет предоставляет очень простой способ получить отдельный
.env
-файл, отдельный путь к хранилищу и отдельную базу данных для каждого такого клиента.Please open Telegram to view this post
VIEW IN TELEGRAM
Разработчики, возьмите на заметку: чему нас могут научить хакеры при ревью PHP-кода
Вот на что часто обращают внимание хакеры при ревью PHP-кода —
Этот простой паттерн помогает находить уязвимости типа SQL-инъекция буквально за минуты. Такие конструкции часто встречаются в небезопасных реализациях, особенно без параметризации запросов
Попробуйте сами: поищите это выражение в open-source проектах на GitHub — многие уязвимости видны сразу
Безопасный код — это ваш лучший контрприём
👉 @PHPgx
Вот на что часто обращают внимание хакеры при ревью PHP-кода —
$this->db->query
Этот простой паттерн помогает находить уязвимости типа SQL-инъекция буквально за минуты. Такие конструкции часто встречаются в небезопасных реализациях, особенно без параметризации запросов
Попробуйте сами: поищите это выражение в open-source проектах на GitHub — многие уязвимости видны сразу
Безопасный код — это ваш лучший контрприём
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по PHP
Функция
Документация: https://php.net/manual/ru/function.parse-url.php
👉 @PHPgx
Функция
parse_url()
вернёт части URL, например, имя домена, если указать PHP_URL_HOST
.Документация: https://php.net/manual/ru/function.parse-url.php
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Phptop — это простой профилировщик ресурсов PHP, безопасный для использования на продуктивных сайтах. Помогает отслеживать использование CPU и памяти на каждый запрос.
Отличный инструмент для разработчиков, стремящихся оптимизировать свои PHP-приложения.
https://github.com/bearstech/phptop
👉 @PHPgx
Отличный инструмент для разработчиков, стремящихся оптимизировать свои PHP-приложения.
https://github.com/bearstech/phptop
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по Laravel
Нужно сгенерировать защищённые ссылки для скачивания, которые истекают через определённое время?
Используйте
Отлично подходит для платного контента или конфиденциальных документов.
Ссылка на документацию: https://laravel.com/docs/12.x/filesystem#temporary-urls
👉 @PHPgx
Нужно сгенерировать защищённые ссылки для скачивания, которые истекают через определённое время?
Используйте
temporaryUrl()
, чтобы создать временный доступ к приватным файлам.Отлично подходит для платного контента или конфиденциальных документов.
Ссылка на документацию: https://laravel.com/docs/12.x/filesystem#temporary-urls
Please open Telegram to view this post
VIEW IN TELEGRAM
Нашёл пакет, о котором раньше не знал:
LarsWiegers/laravel-maps
https://github.com/LarsWiegers/laravel-maps
Этот пакет позволяет легко использовать leaflet.js или Google Maps для создания карты в Laravel-проекте
А ты используешь какие-нибудь альтернативы для отображения карты объектов на сайте на Laravel?
👉 @PHPgx
LarsWiegers/laravel-maps
https://github.com/LarsWiegers/laravel-maps
Этот пакет позволяет легко использовать leaflet.js или Google Maps для создания карты в Laravel-проекте
А ты используешь какие-нибудь альтернативы для отображения карты объектов на сайте на Laravel?
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from IT Portal
Чуть не пропустил, вчера PHP отметил своё 30-летие
8 июня 1995 года, программист родом из Гренландии, Расмус Лердорф, публикует в usenet анонс набора CGI-скриптов, который он назвал PHP Tools
Сегодня PHP обеспечивает работу 74,2% серверной части веба. Далее идут: Ruby — 6,2%, Java — 5,2%, ASP.NET — 5,1% и JavaScript на стороне сервера — 4,5% (по данным W3Techs)
С днём рождения, PHP!😇
@IT_Portal
8 июня 1995 года, программист родом из Гренландии, Расмус Лердорф, публикует в usenet анонс набора CGI-скриптов, который он назвал PHP Tools
Сегодня PHP обеспечивает работу 74,2% серверной части веба. Далее идут: Ruby — 6,2%, Java — 5,2%, ASP.NET — 5,1% и JavaScript на стороне сервера — 4,5% (по данным W3Techs)
С днём рождения, PHP!
@IT_Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Прекрати использовать массивы PHP для обработки данных
Создавай свои DTO — классы со свойствами
или используй
Также не забудь про неизменяемость. Убедись, что твои DTO являются immutable (записываются один раз), чтобы можно было быть уверенным, что объект не был где-либо изменён.
Ключевое слово
👉 @PHPgx
Создавай свои DTO — классы со свойствами
или используй
spatie/laravel-data
Также не забудь про неизменяемость. Убедись, что твои DTO являются immutable (записываются один раз), чтобы можно было быть уверенным, что объект не был где-либо изменён.
Ключевое слово
readonly
тебе в этом поможетPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM