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

Связь: @devmangx
Download Telegram
Composer Package Executor

Это CLI-инструмент, который позволяет выполнять любую команду из любого Composer-пакета, даже если этот пакет не установлен в вашем проекте.

По сути, это как npx, но для Composer

https://github.com/imliam/cpx

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Новое в Symfony 7.3: компонент 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

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
🥳 Судя по результатам голосования, похоже, в PHP 8.5 появится оператор Pipe.

https://wiki.php.net/rfc/pipe-operator-v3

#php

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
FrankenPHP теперь официально поддерживается Фондом PHP.

Репозиторий проекта будет перенесён в организацию PHP на GitHub

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Задумывались, как работает загрузка файлов в PHP? 🤔

Когда пользователь отправляет файл, PHP предоставляет специальный массив $_FILES с именем, размером, типом и временным местоположением файла.

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

Знали ли вы, что значения по умолчанию для столбцов базы данных можно задавать не только на уровне базы данных в миграциях, но и на уровне Eloquent-модели с помощью свойства $attributes?

Ссылка на документацию: https://laravel.com/docs/12.x/eloquent#default-attribute-values

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Ускорьте работу Laravel: Мой запрос стал выполняться на 30 секунд быстрее

Я заменил whereNotIn() на leftJoin()
— и запрос стал выполняться на 30 секунд быстрее.

Таблица, по которой выполнялся поиск, содержала более 800 тысяч записей.

Вот 10 быстрых способов оптимизировать запросы в Laravel:

🔹Используйте leftJoin() вместо whereNotIn()
— быстрее и эффективнее.

🔹Замените whereIn() на whereExists()
— экономит память.

🔹Выбирайте только нужные столбцы через select()
— избегайте User::all().

🔹Обрабатывайте большие объемы данных по частям через chunk()
— не загружайте всё сразу.

🔹Используйте pluck() вместо get()
— быстрее при выборке одного столбца.

🔹Проверяйте наличие записей через exists() вместо count() > 0.

🔹Используйте upsert() вместо updateOrInsert()
— меньше запросов.

🔹Пагинируйте результаты через paginate()
— не загружайте все данные сразу.

🔹Кэшируйте часто используемые запросы через cache()
— снижает нагрузку на базу данных.

🔹Избегайте жадной загрузки в циклах, используйте load()
— эффективная загрузка связей.

Каждая миллисекунда имеет значение.
Небольшие изменения = значительный прирост производительности ✌️

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по Laravel.

Защитите ваше приложение от спамеров при регистрации.

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

После достижения лимита пользователи/боты будут получать ошибку "429 Too Many Requests"

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Нашёл годный пакет Laravel

gecche/laravel-multidomain: для использования Laravel-приложения в многодоменной конфигурации
https://github.com/gecche/laravel-multidomain

Этот пакет предоставляет очень простой способ получить отдельный .env-файл, отдельный путь к хранилищу и отдельную базу данных для каждого такого клиента.

👉 @PHPgx
Please open Telegram to view this post
VIEW IN TELEGRAM
Разработчики, возьмите на заметку: чему нас могут научить хакеры при ревью PHP-кода

Вот на что часто обращают внимание хакеры при ревью PHP-кода — $this->db->query

Этот простой паттерн помогает находить уязвимости типа SQL-инъекция буквально за минуты. Такие конструкции часто встречаются в небезопасных реализациях, особенно без параметризации запросов

Попробуйте сами: поищите это выражение в open-source проектах на GitHub — многие уязвимости видны сразу

Безопасный код — это ваш лучший контрприём

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

Функция parse_url() вернёт части URL, например, имя домена, если указать PHP_URL_HOST.

Документация: https://php.net/manual/ru/function.parse-url.php

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

Нужно сгенерировать защищённые ссылки для скачивания, которые истекают через определённое время?

Используйте temporaryUrl(), чтобы создать временный доступ к приватным файлам.

Отлично подходит для платного контента или конфиденциальных документов.

Ссылка на документацию: https://laravel.com/docs/12.x/filesystem#temporary-urls

👉 @PHPgx
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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Прекрати использовать массивы PHP для обработки данных

Создавай свои DTO — классы со свойствами

или используй spatie/laravel-data

Также не забудь про неизменяемость. Убедись, что твои DTO являются immutable (записываются один раз), чтобы можно было быть уверенным, что объект не был где-либо изменён.

Ключевое слово readonly тебе в этом поможет

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