Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Новые сообщения об ошибках в PHP 8.3

Предстоящая версия PHP 8.3 вводит 38 новых сообщений об ошибках, удаляя при этом 11. Количество уникальных сообщений об ошибках составляет 783, что ставит PHP 8.3 на четвёртое место, обогнав PHP 8.2, но всё ещё уступая PHP 7.4. Сообщения об ошибках обычно накапливаются в пределах основной версии PHP до следующей версии с изменениями, где они удаляются.

Некоторые из новых интересных сообщений об ошибках в PHP 8.3 включают:

1️⃣Устаревшее использование get_class() и get_parent_class() без аргументов. Теперь аргументы обязательны, и рекомендуется использовать $this внутри класса.
2️⃣Ошибка при использовании неподходящего значения для типизированной константы класса.
3️⃣Ограничение возможных типов для констант класса, исключая такие типы, как never, void и callable.
4️⃣Запрет некоторых модификаторов для элементов класса, таких как abstract, static, public, final и т. д.
5️⃣Устаревшее увеличение неалфавитных строк с рекомендацией использовать специализированные функции, такие как str_increment().
6️⃣Введение конкретных сообщений об ошибках для операций декремента с пустыми строками, нечисловыми строками, булевыми и null-типами.
7️⃣Предупреждение о попытке операций инкремента или декремента для булевых значений.
8️⃣Ошибка линтинга для дублирования объявлений статических переменных в замыканиях.
👍102
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Подборка лучших статей «Библиотеки программиста» за октябрь: сохраняй в заметки, чтобы не пропустить #самыйсок

📊 Эффективная работа с JSON в Go
🔝 Лучшие практики Go: путь к чистому коду
📚 ТОП-8 книг по DevOps в 2023 году
💪 6 сервисов для подготовки к техническим собеседованиям
🗺️ Карьерная карта: что это, как ее составить и почему она обязательно нужна разработчику
🛡️ 8 способов защиты от манипуляций на работе
👩‍💻 Женщины в ИТ: проблемы и преимущества сложной профессии
🤖 8 лучших бесплатных курсов по ИИ и глубокому обучению
👨‍💻 9 трендов в найме айтишников в 2023 году
🤔 9 мифов об IT и найме айтишников
🤖 25 бесплатных AI-инструментов для разработчиков
☁️ ТОП-10 бессерверных фреймворков
🚩 Итог одной валютной удаленки: проработал месяц бесплатно и ушел с долгами
💻 20 лучших ноутбуков для программиста в 2023 году
🧠 Как научиться критически мыслить: 6 эффективных способов
Результаты ежегодного опроса разработчиков StackOverflow: 20+ главных инсайтов 2023 года
1🔥1🥱1
🔎Эта статья рассматривает использование Symfony Messenger вместе с Redis для мониторинга и отслеживания событий, происходящих во время обработки сообщений.

🔑Целью является создание ключей в Redis, которые подсчитывают количество событий различных видов мессенджера как для общего мониторинга, так и для конкретных сообщений. Рассматриваются события, связанные с приемом, обработкой, ошибками и повторными попытками обработки сообщений.

⚙️Настройка включает установку Symfony Messenger и Redis, конфигурацию сервера Redis с использованием Docker и настройку бандла Redis. Используются два типа ключей: общие ключи для общего мониторинга и ключи сообщений для конкретного мониторинга. В статье предоставляется пошаговая инструкция по настройке Redis и созданию необходимых ключей.

🔄Затем представлен сервис MessengerHandler, который взаимодействует с Redis с использованием конвейеров для эффективной обработки хитов для различных ключей. Два перечисления, MessengerEvents и MessengerTimeEvents, используются для категоризации событий и временных интервалов.

👂Далее создается класс MessengerSubscriber, который прослушивает различные события мессенджера и использует сервис MessengerHandler для обновления ключей Redis соответственно.

Для демонстрации функционала в статье создается простое сообщение и его обработчик, настраивается Redis-транспорт Symfony Messenger и отправляется сообщение. В конце статьи объясняется, как проверить сгенерированные ключи Redis, чтобы убедиться, что мониторинг работает правильно.
👍8🥱1
Управление сессиями Laravel в кластерах Kubernetes

В то время как Kubernetes предоставляет преимущества, такие как горизонтальное масштабирование без сохранения состояния, фоновая обработка и гибкость хранения, он вводит сложности для управления сессиями.

Проблемы возникают из-за отсутствия состояния в подах Kubernetes, что может привести к несогласованным данным сессии и проблемам с опытом пользователя. Статья предлагает два решения для разработчиков Laravel:

1️⃣Клиентские сессии (Session Affinity): Это включает в себя настройку Kubernetes для обеспечения того, чтобы запросы от конкретного клиента постоянно направлялись к одному и тому же поду. Это можно достичь через сессионную аффинность на основе IP или куки. В то время как это может решить некоторые проблемы, это может привести к неравномерному распределению трафика и потенциальным нарушениям, если под, обрабатывающий клиентскую сессию, сталкивается с проблемами.

2️⃣Распределенное хранилище сессий с Redis: В статье предлагается использовать Redis в качестве распределенного хранилища сессий для обмена данными сессии между несколькими экземплярами приложения Laravel. Redis выбран из-за своей производительности, масштабируемости, устойчивости и поддержки различных структур данных. Предоставлены шаги по настройке Redis в качестве драйвера сессии в Laravel, включая установку необходимого пакета, обновление конфигурационных файлов и развертывание Redis в Kubernetes с использованием Helm.

Реализуя либо клиентские сессии, либо распределенное хранилище сессий с Redis, разработчики Laravel могут преодолеть проблемы, внесенные Kubernetes, обеспечивая согласованное управление сессиями и опыт пользователя в масштабируемых средах.
3👍3
Что означает утверждение о том, что СУБД поддерживает контроль ссылочной целостности связей?

Утверждение о том, что СУБД поддерживает контроль ссылочной целостности связей означает, что СУБД автоматически обеспечивает целостность данных, связанных между таблицами. Она регулирует и проверяет соответствие значений внешнего ключа (foreign key) со значениями первичного ключа (primary key) родительской таблицы.

#вопросы_с_собеседований
👍15🥱9
Создание базовой схемы GraphQL, используя атрибуты PHP и Resonance

Статья рассматривает концепцию GraphQL как альтернативы REST и других систем API, которая преобразует приложение в графовую базу данных, с которой можно выполнять запросы.

Основная идея заключается в том, что вместо того чтобы выставлять и создавать специфические конечные точки, можно выставить структуры данных.

Resonance представляет собой асинхронный PHP-фреймворк, способный параллельно разрешать все поля GraphQL.

Статья начинается с базовой схемы GraphQL, предоставляющей объект ping с единственным полем message, всегда возвращающим «pong».

Основной акцент делается на использовании Resonance для обработки запросов GraphQL асинхронно. Приводится пример кода на PHP для создания GraphQL-схемы, Responder для обработки POST-запросов на '/graphql' и пример объекта типа Ping.
7👍6
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🥱2👍1
Создание быстрого и простого пользовательского интерфейса мгновенного поиска с помощью Alpine AJAX и Laravel.

Здесь рассказывается о том, как добавить мгновенный фильтр поиска в вашем Laravel-приложении, используя библиотеку Alpine AJAX, создавая функцию «поиска на лету» без написания JavaScript. Пример показан на списке контактов, где пользователи могут искать контакты по имени или электронной почте.

⚙️Настройка данных:

Начните с новой установки Laravel и настройте базу данных.
Запустите миграции (php artisan migrate), чтобы создать таблицу «users».
Используйте Tinker (php artisan tinker), чтобы создать пример данных пользователя (User::factory()->count(20)->create()).

🎨Настройка view:

Создайте шаблон Blade в resources/views/contacts.blade.php.
Разработайте базовую страницу с формой поиска и списком контактов.
Отбросьте стили CSS для простоты.

🌐Логика маршрута:

Создайте маршрут в /contacts в routes/web.php.
Реализуйте логику проверки наличия поискового запроса в запросе и фильтрации результатов из таблицы «users» соответственно.

📜Взаимодействие с Alpine AJAX:

Включите скрипты Alpine и Alpine AJAX в заголовок страницы.
Улучшите форму поиска с помощью атрибутов Alpine:
x-init: Инициализирует компонент Alpine.
x-target: Указывает целевой элемент для обновлений AJAX.
@input.debounce: Автоматически отправляет форму при изменении ввода.
x-show="false»: Скрывает кнопку отправки, обеспечивая резервный вариант, если JavaScript не загружен.

🔄Результат:

Список контактов мгновенно обновляется при вводе, благодаря Alpine AJAX.
👍5🥱3🤔2
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
4
Предотвращение спама в формах Statamic

В этой статье рассказывается о том, как добавить службу предотвращения спама к формам в Statamic для отклонения подозрительных отправок. Автор использует Akismet, но подчеркивает, что можно выбрать любую службу предотвращения спама. Шаги включают создание учетной записи Akismet, получение API-ключа и добавление его в файл .env, а также создание слушателя, который вызывается при отправке формы. Для проверки на спам используется метод isSpam, который в данном случае отправляет данные формы на проверку в Akismet.

Также указаны возможные улучшения, такие как отображение спамных отправок в панели управления Statamic и заменяемость службы предотвращения спама на другую.
4
Что такое namespace и зачем они?

Namespace в PHP — это механизм, который позволяет управлять областями видимости в коде, предотвращая конфликты имен и обеспечивая логическую организацию кода. Введение пространств имен в PHP позволяет структурировать проект, избегать конфликтов именования классов, функций и констант, а также облегчает интеграцию различных библиотек и компонентов.

Зачем используются пространства имен:

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

Организация кода: Пространства имен помогают логически организовать код, разделяя его на логические группы. Например, все классы, связанные с базой данных, могут быть помещены в пространство имен Database.

Автозагрузка классов: Использование пространств имен может сделать автозагрузку классов более эффективной и структурированной, особенно при использовании стандартов автозагрузки, таких как PSR-4.

#вопросы_с_собеседований
🥱13👍51
Полезные каналы по PHP :

PHP вакансии@rabotaphp
Вакансии для PHP-разработчиков.

Уютное сообщество пхпшников. Книги@phpdom
Книги + тесты на знание языка + туториалы и разборы кода

PHP books@phpbook.
Книги по PHP и смежным технологиям;

Реклама. Киренкина Марина Дмитриевна, ИНН 345702417736. Erid 2VtzqwpUHeH
🥱31
Автор столкнулся с ошибкой «Lock wait timeout» при создании многоадресного API с использованием Laravel и трейта RefreshDatabase. Приложение имело базу данных платформы и отдельную базу данных для каждого арендатора, выбираемую во время выполнения на основе ключа API. Тесты, использующие трейт RefreshDatabase, приводили к ошибке времени ожидания блокировки. Причина была обнаружена в переключении базы данных во время выполнения, что сбивало с толку управление транзакциями Laravel. Решением стало использование свойства connectionsToTransact в классе TestCase, указывающего базы данных, участвующие в транзакциях. Это позволило транзакциям охватывать изменение базы данных и устранило проблему времени ожидания блокировки. Кроме того, это гарантировало правильную очистку тестовых данных из обеих баз данных после выполнения тестов.
5
Безотказные очереди в RabbitMQ: Гарантированная доставка сообщений

Статья представляет RabbitMQ как открытую реализацию протокола AMQP (Advanced Message Queuing Protocol) и мощный брокер сообщений, обеспечивающий эффективное взаимодействие между компонентами системы. Автор фокусируется на безотказных очередях в RabbitMQ и их важности в распределенных системах.🚀

🔑Почему безотказные очереди важны:
🛡️В условиях сбоев и ошибок обеспечение надежной доставки сообщений становится жизненно важным. Безотказные очереди решают эту проблему, гарантируя сохранение сообщений до их успешной доставки, что обеспечивает стабильное взаимодействие между системами.

🤔Проблемы при проектировании решения:
Описывается сценарий, где компоненты системы обмениваются важными сообщениями, и из-за временной недоступности одной системы отправка сообщений может не удаваться. Решение в «quorum» очередях RabbitMQ предоставляет параметры для контроля попыток отправки, но возникают проблемы с отсутствием встроенной задержки.

🛠️Механизм работы выбранного решения:
Автор представляет механизм обработки сообщений, использующий обменники, первичные очереди, обработку ошибок и механизм повторных попыток.🔄 Он объясняет, как сообщения направляются через различные очереди, как управляется количество попыток и как обеспечивается гибкость и надежность в обработке сообщений.
4👍1
Что скажете про HTMX, использовали ли?🔽🔽🔽
🥱12👍2🤔1