Библиотека пхпшника | 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
Управление сессиями 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
Минимум, который должен знать каждый разработчик программного обеспечения о Unicode в 2023 году

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

Статья подробно рассматривает кодовые точки, приводит примеры (например, буквы латинского алфавита, символы эмодзи), и объясняет, как Unicode решает проблему представления различных языков. Она также затрагивает кодировки UTF-8 и UTF-16, описывая, как они представляют символы в памяти компьютера.

Стоит также обратить внимание на важность использования библиотек для работы с Unicode, особенно при выполнении операций, таких как определение границ графем и нормализация строк.
4
#дайджест новостей по PHP за неделю:

🔎Вышел PHP 8.3!

🔎PhpStorm теперь поддерживает PHP 8.3 — На сегодняшний день PhpStorm обеспечивает полную поддержку всех улучшений PHP 8.3.

🔎Выпущена версия Laravel 10.32 — На этой неделе команда Laravel выпустила версию 10.32 с новыми директивами условного нажатия Blade и многим другим.

🔎Выпущена Symfony 7.0.0-RC1 — Только что выпущена Symfony 7.0.0-RC1. Вот список наиболее важных изменений с версии 7.0.0-BETA3.

🔎 Неделя Symfony #881 (13–19 ноября 2023 г.) — В этой сборке вы можете обнаружить несколько улучшений в различных подсистемах.

🔎PhpStorm 2023.3 Beta
👍92
В этой статье обсуждается, как предотвратить дублирование отправок форм или запросов в приложениях Laravel с использованием атомарных блокировок. Атомарные блокировки помогают управлять распределенными блокировками, не беспокоясь о состязательности.

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

Метод Cache::lock используется для создания атомарной блокировки. Он принимает три аргумента: имя блокировки, продолжительность ее действия и необязательный параметр владельца. Имя должно быть уникальным, чтобы избежать коллизий.

В примере SendPaymentController создается блокировка с уникальным именем ({$account->id}:payment:send), которая остается действительной в течение 10 секунд. Если блокировка получена, запрос обрабатывается, и пользователь перенаправляется с сообщением об успехе. Если блокировка не получена, пользователь перенаправляется с сообщением об ошибке.
7
Stressless — стресс-тестирование с помощью PEST

🔎В ходе LaraconAU представлены две значимые новинки: Laravel Pulse и плагин Stressless от Nuno Maduro, предназначенный для стресс-тестирования приложений.

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

Stressless использует инструмент k6, мощный инструмент с открытым исходным кодом для нагрузочного тестирования, чтобы оценить производительность API, микросервисов и веб-сайтов. Плагин интегрируется с Expectation API в Pest, обеспечивая отсутствие регрессий в стабильности и надежности приложения.
5