en
Feedback
PHP-BE1

PHP-BE1

Open in Telegram

Канал по PHP, полезный и интересный контент для всех уровней. По вопросам сотрудничества @cyberJohnny

Show more
292
Subscribers
No data24 hours
-17 days
-330 days
Posts Archive
🛠 Как записывать SQL-запросы только в случае ошибок Часто сталкиваюсь с ситуацией: ошибка 500 в продакшене, и непонятно, что именно пошло не так. Особенно если это связано с ошибкой в SQL-запросе. Логировать все SQL-запросы — это слишком много и создает лишний шум. Но логировать только при исключениях — это отличное решение! 🔍 Решение Добавьте следующий код в AppServiceProvider: use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; public function boot() { DB::listen(function ($query) { if (app()->bound('exception.logged')) { Log::channel('sql')->debug($query->sql, $query->bindings); } }); app()->singleton('exception.logged', function () { return true; }); app()->error(function (\Throwable $e) { app()->instance('exception.logged', true); }); } 🔐 Пояснение - При каждом SQL-запросе мы проверяем, возникло ли исключение. - Если да — записываем SQL. - Используем отдельный лог-канал sql, чтобы не загромождать основной laravel.log. 👉 Создайте в config/logging.php канал sql, направьте его в отдельный файл, например storage/logs/sql.log. Теперь, если в продакшене произойдет ошибка, вы увидите, какой SQL-запрос был выполнен перед ней. Это значительно упрощает диагностику проблем.

⚡️Laravel — удобный PHP-фреймворк, а его возможности выходят далеко за рамки классической веб-разработки. Хотите увидеть, как
⚡️Laravel — удобный PHP-фреймворк, а его возможности выходят далеко за рамки классической веб-разработки. Хотите увидеть, как он помогает автоматизировать реальные процессы? На бесплатном вебинаре 16 апреля в 20:00 мск покажем, как с помощью Laravel и Telegram Bot API создать Telegram-бота для дистанционного полива цветов. Подключим IoT-устройства, разберём работу с MQTT и визуализируем данные через Grafana. Вы узнаете, как использовать Laravel в IoT-сценариях, управлять устройствами через Telegram, собирать и отображать метрики, а также получите представление о возможностях Arduino на примере ESP-8266. 👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://clck.ru/3LLvTd Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Релизы PHP 8.4.6 и 8.3.20 https://www.php.net/ChangeLog-8.php Также в апреле был проведён целевой аудит безопасности исходног
Релизы PHP 8.4.6 и 8.3.20 https://www.php.net/ChangeLog-8.php Также в апреле был проведён целевой аудит безопасности исходного кода PHP, что позволило закрыть несколько потенциальных уязвимостей. @php_be1

Привет! Мы — основатели KTS, IT–компании со штатом в 170+ специалистов, которая создает цифровые продукты для бизнеса с 2015 года. Недавно мы запустили канал, в котором простым языком рассказываем о том, как бизнес пользуется ИИ-агентами, и объясняем, как они устроены изнутри. Этот канал будет про: – кейсы внедрения AI крупными компаниями и стартапами по всему миру; – то, как мы сами внедряем AI в работу компании и что делаем для российских клиентов; – устройство AI-агентов с упором на бизнес-эффект. Подпишись () и черпай полезный опыт! @php_be1 https://t.me/inside_ai_tech

Сегодня я расскажу вам о возможности PHP, которую многие либо не знают, либо забывают использовать — это деструктуризация мас
Сегодня я расскажу вам о возможности PHP, которую многие либо не знают, либо забывают использовать — это деструктуризация массива. И зря! Смотрите, вместо привычного способа: $user = getUser(); // ['name' => 'Ivan', 'email' => 'ivan@example.com'] $name = $user['name']; $email = $user['email']; Можно сделать так: ['name' => $name, 'email' => $email] = getUser(); Код стал более чистым, коротким и понятным. Особенно приятно, когда возвращается ассоциативный массив — не нужно писать вручную много $data['ключ']. Или с обычными массивами: [$id, $name, $email] = getUserArray(); // [1, 'Ivan', 'ivan@example.com'] Деструктуризация массива работает с любой нумерацией — главное, чтобы структура совпадала. 💡 Я часто использую это в контроллерах, в тестах и при разборе конфигураций. Это удобно и читаемо.

Новый метод whereAttachedTo() в Laravel 12.7 для получения записей из отношения belongsToMany. @php_be1
Новый метод whereAttachedTo() в Laravel 12.7 для получения записей из отношения belongsToMany. @php_be1

Сегодня я расскажу, как я упростил настройку и запуск проектов на Laravel с помощью кастомной команды Make. Когда ты постоянн
Сегодня я расскажу, как я упростил настройку и запуск проектов на Laravel с помощью кастомной команды Make. Когда ты постоянно работаешь с Laravel, такие команды, как php artisan migrate, npm run dev, php artisan serve, php artisan key:generate становятся рутиной. А если у тебя несколько проектов, путаницы не избежать. Я решил, что это невыносимо. Поэтому я создал простую команду в Makefile, которая за считанные секунды поднимает проект в нужной последовательности. Вот пример: up: @cp .env.example .env || true @php artisan key:generate @composer install @npm install @php artisan migrate @php artisan db:seed @npm run dev @php artisan serve Теперь я просто пишу make up — и Laravel запускается 🚀 Можно добавить и другие команды: make test, make down, make fresh, make lint, и каждый проект будет управляться по единому сценарию. Это экономит много времени. 💡 Совет: обязательно ставь @ перед командами — так терминал не будет засорён выводом строк Makefile. 👉 @php_be1

Анонс Laravel Wayfinder Генерация TypeScript-функций для ваших Laravel-контроллеров и маршрутов https://github.com/laravel/wayfinder @php_be1

Сегодня я хочу поделиться с вами простым и удобным приемом, который помогает поддерживать порядок в больших PHP-проектах — это использование кастомных коллекций вместо обычных массивов. Если вы когда-либо передавали массивы объектов в методы или возвращали их из них, то, вероятно, сталкивались с ситуацией, когда неясно, что именно содержится в массиве. А потом кто-то мог передать туда строку или null — и вот вам, баги. Я начал использовать свои классы коллекций. Вот простой пример: class UserCollection { /** @ var User[] */ private array $users = []; public function __construct(array $users = []) { foreach ($users as $user) { $this->add($user); } } public function add(User $user): void { $this->users[] = $user; } public function all(): array { return $this->users; } public function filterByActive(): self { return new self(array_filter($this->users, fn(User $u) => $u->isActive())); } // и так далее } Теперь везде, где раньше использовался массив User[], я применяю UserCollection. Это сразу дает: - типизацию (и защиту от случайных ошибок), - автодополнение в IDE, - методы прямо в коллекции (например, filterByActive, sortByName, first() и т.д.), - более чистые и понятные сигнатуры методов. Это похоже на коллекции из Laravel, но я использую это везде, даже в небольших проектах без фреймворков. Такие объекты делают код более чистым, устойчивым и легче читаемым. Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше. 👉 [|@php_be1]

🔥 Laravel Telemetry 🔥 Команда Laravel объявляет о включении во фреймворк Telemetry — нового модуля для сбора анонимной стат
🔥 Laravel Telemetry 🔥 Команда Laravel объявляет о включении во фреймворк Telemetry — нового модуля для сбора анонимной статистики об использовании фреймворка. Это поможет анализировать популярные фичи, оптимизировать производительность и сделать Laravel ещё лучше! Telemetry будет включена по умолчанию и собирать такие данные, как версия PHP, используемые пакеты, время выполнения запросов и частота ошибок. Если вдруг вы не хотите участвовать в улучшении Laravel, всегда можно отключить сбор данных через env-переменную TELEMETRY_ENABLED=false. @php_be1

🔥Laravel — мощный PHP-фреймворк, но его скорость может быть ограничена стандартной связкой Nginx + PHP-FPM. Хотите разогнать
🔥Laravel — мощный PHP-фреймворк, но его скорость может быть ограничена стандартной связкой Nginx + PHP-FPM. Хотите разогнать своё приложение и сократить время отклика? На открытом вебинаре 3 апреля в 20:00 мск разберём, как интегрировать Laravel с Roadrunner — высокопроизводительным сервером, который меняет подход к обработке запросов. Используем Octane, оптимизируем ресурсы и ускорим выполнение кода. Вы научитесь подключать Roadrunner к своим проектам, поймёте, как он меняет жизненный цикл PHP-приложения, и сможете внедрить передовые технологии для масштабирования ваших сервисов. 👉Регистрируйтесь и получите скидку на большое обучение «Framework Laravel»: https://clck.ru/3KAfSd Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Сегодня я расскажу, как удобно использовать .env файлы в проектах на PHP, особенно если вы не работаете с Laravel. В Laravel всё просто — доступна встроенная поддержка через библиотеку vlucas/phpdotenv. Но если у вас свой фреймворк или самописный проект, можно также легко организовать работу с переменными окружения. Вот что я делаю: 1. Устанавливаю библиотеку: composer require vlucas/phpdotenv 2. Создаю .env файл в корне проекта: APP_ENV=local DB_HOST=localhost DB_NAME=test 3. Загружаю переменные в PHP: $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); // Теперь можно использовать $_ENV['DB_HOST'] или getenv('DB_HOST'). Важно: createImmutable с PHP 7.1+ — безопасный вариант, не перезаписывает уже установленные переменные окружения. 💡 Совет: не забывайте добавлять .env в .gitignore и создавайте .env.example с шаблоном. Это будет полезно для команды и для вас в будущем. А как вы храните конфигурации? Может быть, кто-то уже использует symfony/dotenv или даже Docker secrets? Поделитесь в комментариях 👇 👉 [|@php_be1]

Сегодня я расскажу вам о простой, но эффективной технике, которая может улучшить ваш PHP-код — использование Value Object вместо обычных типов. Часто мы передаём параметры в виде строк, целых чисел или массивов. Это просто и понятно. Но когда бизнес-логика становится более сложной, типы начинают нас подводить. Предположим, у вас есть метод: function sendSms(string $phoneNumber, string $message): void Сколько раз вы замечали, что номер телефона передаётся в неправильном формате? Или вообще пустым? Или из другой страны, а вы это не учли? Вот здесь на помощь приходят Value Object'ы: final class PhoneNumber { public function __construct(private string $number) { if (!preg_match('/^\+7\d{10}$/', $number)) { throw new InvalidArgumentException('Недействительный номер телефона'); } } public function value(): string { return $this->number; } } Теперь ваш метод будет выглядеть следующим образом: function sendSms(PhoneNumber $phoneNumber, Message $message): void Что мы получаем: - Гарантия валидности данных на этапе создания объекта. - Код становится самодокументируемым — нет необходимости читать описание, чтобы понять, что именно передаётся. - IDE и статическая проверка типов не позволят случайно передать email вместо номера телефона. Да, это чуть больше кода. Но в данном случае "больше" означает "надежнее".

⚡️Laravel — это не просто PHP-фреймворк, а инструмент, который меняет подход к веб-разработке. Он помогает писать чистый, под
⚡️Laravel — это не просто PHP-фреймворк, а инструмент, который меняет подход к веб-разработке. Он помогает писать чистый, поддерживаемый код, ускоряет работу и открывает доступ к мощному инструментарию, который используется в крупных проектах. Если вы уже работаете с PHP, но хотите выйти на новый уровень, Laravel — ваш лучший выбор. Мы научим вас грамотно использовать этот фреймворк, обеспечивать безопасность приложений, развертывать код и использовать встроенные инструменты для ускорения разработки. Программа курса строится на реальных задачах и практике. Вы научитесь применять Laravel в продакшен-разработке. А поддержка опытных менторов и разбор сложных кейсов помогут вам быстрее освоить фреймворк и прокачать навыки. 👉Пройдите вступительное тестирование и получите скидку на обучение: https://clck.ru/3JWcV3 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Laravel Starter Kits: A New Beginning for Your Next Project @php_be1 https://blog.laravel.com/laravel-starter-kits-a-new-beginning-for-your-next-project

Laravel-Zero (https://laravel-zero.com/) - это микро-фреймворк для консольных приложений на базе Laravel Framework, позволяющ
Laravel-Zero (https://laravel-zero.com/) - это микро-фреймворк для консольных приложений на базе Laravel Framework, позволяющий легко и быстро разрабатывать функционал работающий без веба. Но инициатором этой статьи стал кейс при использовании Laravel Prompts (https://laravel.com/docs/prompts) с несколькими часами потраченного времени. Для экономии Вашего времени при столкновении с этой ошибкой или вовсе преждевременным её устранением, добро пожаловать в пост: https://habr.com/ru/articles/892010/ @php_be1

Список новых стартовых наборов для Laravel https://github.com/tnylea/laravel-new @php_be1
Список новых стартовых наборов для Laravel https://github.com/tnylea/laravel-new @php_be1

Уязвимость в Laravel Затронуты все версии. Исправления готовы только для 12-10. https://github.com/advisories/GHSA-78fx-h6xr-
Уязвимость в Laravel Затронуты все версии. Исправления готовы только для 12-10. https://github.com/advisories/GHSA-78fx-h6xr-vch4 @php_be1