TG Telegram Group Link
Channel: Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Back to Bottom
Авторизация через Yandex, ВК, Telegram с помощью Laravel Socialite

В интернете есть множество статей и руководств по интеграции OAuth авторизации через популярных провайдеров, таких как Google, Facebook и Twitter, в проекты на Laravel. Но как это сделать через Yandex, ВК и т.п. информации в рунете нет вообще.

Пример показан на основе Яндекса. Через другие провайдеры делайте аналогично.
👍14
В отношениях многие-ко-многим ваша таблица связи может содержать не только дополнительные поля, а даже дополнительные связи с другими моделями.

Для этого создайте отдельную модель для таблицы связи (Pivot Model):

php artisan make:model RoleUser --pivot

Далее указывайте это в belongsToMany() с помощью метода ->using() Затем вы можете выполнять «магию», как в примере
😢7👍4🔥21😁1
Как вы используете макросы response для упрощения ответов API в Laravel?

Laravel предоставляет функцию, называемую макросами ответов, которая позволяет определять пользовательские форматы ответов, которые могут быть повторно использованы в вашем приложении. Макросы ответов могут упростить процесс создания ответов API, инкапсулируя общие форматы ответов в многократно используемый метод.

В этом примере мы определяем пользовательский формат ответа с помощью метода макроса на фасаде Response. Пользовательский формат ответа возвращает ответ в формате JSON с ключом состояния и необязательным ключом данных.

Затем мы используем пользовательский формат ответа в UserController, вызывая response()->api() и передавая данные, которые мы хотим вернуть.

Используя макросы ответов, мы можем упростить процесс создания ответов API и избежать дублирования кода в нашем приложении.

#вопросы_с_собеседований
👍6🥱4😢21🎉1
Понимание генераторов, корутинов и фиберов в разных языках

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

Генераторы:

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

🔸JavaScript: Генераторы создаются с использованием function* и yield.

🔸Python: Генераторы определяются с использованием def и yield

🔸PHP: Генераторы введены в версии 5.5 с использованием yield

Корутины:

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

🔸Python: Корутины — это асинхронные генераторы, определяемые с помощью async def и await.

Фибры:

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

🔸Ruby: Ruby поддерживает фибры, которые могут использоваться для реализации генераторов.
🤔42👍2🥱1
«Как я положил продакшен базу на выходных»

Случается всякое. Предлагаем вам учиться на чужих ошибках, и прочитать эту статью, где автор рассказывает как положил БД из-за транкейта при миграции на новые таблицы, в которых точно не было данных.
👾8😁6
Генерация детерминированных UUID из произвольных строк с помощью Symfony

Здесь рассматривается использование UUIDv5 для генерации уникальных идентификаторов в приложениях, с особым акцентом на решении проблемы утечки внутренней информации, такой как ID продукта в URL.

UUID (Universally Unique Identifier) представляет собой 128-битное число, которое обычно записывается в шестнадцатеричном формате 8-4-4-4-12. Разработчики часто используют случайные UUID, называемые UUIDv4, которые не содержат информации о времени или месте их генерации.

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

Например, в e-commerce приложении можно использовать UUIDv5 для генерации уникальных публичных идентификаторов продуктов. UUIDv5 используют хэш sha1($namespace.$name) для генерации значений. Пространство имен гарантирует уникальность имен внутри него.
👍6
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
1👍1
Yii Database

Yii Database — это независимый от фреймворка пакет для работы с различными типами баз данных, такими как MariaDB , MSSQL , MySQL , Oracle , PostgreSQL и SQLite .

Используя пакет, вы можете выполнять общие задачи базы данных, такие как создание, чтение, обновление и удаление записей в таблице базы данных, а также выполнение необработанных запросов SQL.
👍8😁7🔥4😢2
Каков жизненный цикл запроса в laravel?

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

Инициализация (Bootstrap):

Запрос поступает на веб-сервер (например, Nginx или Apache), который перенаправляет его на index.php файл в корне Laravel приложения.
index.php файл загружает автозагрузчик Composer и инициализирует приложение, вызывая файл bootstrap/app.php.

Создание объекта приложения:

В bootstrap/app.php создается объект приложения, экземпляр класса Illuminate\Foundation\Application.
Конфигурация приложения загружается, а также подключаются различные сервис-провайдеры.

Загрузка сервис-провайдеров:

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

Обработка Middleware:

Laravel начинает обработку глобальных middleware.
Эти middleware могут обрабатывать запросы до и после их обработки контроллерами, занимаясь такими задачами, как аутентификация, сессии и управление CORS.

Маршрутизация:

Запрос передается в маршрутизатор, который определяет, какой контроллер и метод должны обработать запрос, основываясь на URI и HTTP-методе.
Маршрутизация может быть определена в файлах routes/web.php, routes/api.php и других файлах маршрутов.

Обработка контроллером:

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

Генерация ответа:

Контроллер возвращает ответ, который может быть представлением (view), JSON-данными или другим типом ответа.
Этот ответ оборачивается в объект Illuminate\Http\Response.

Обработка завершающих Middleware:

Перед отправкой клиенту, ответ проходит через завершающие middleware (например, для управления сессиями или кешем).

Отправка ответа клиенту:

Обработанный ответ отправляется веб-серверу, который передает его обратно клиенту (например, браузеру).

Завершение запроса:

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

#вопросы_с_собеседований
🔥211
Запуск одного теста, пропуск тестов и другие советы и рекомендации

Здесь рассматриваются различные способы фильтрации, пропуска и таргетирования тестов в PHP с помощью PHPUnit и PestPHP. В начале статьи рассказывается о возможности, которой поделился Нуно Мадуро, — методе ->only() в PestPHP, который позволяет запускать определенные тесты, фокусируясь на конкретных участках кода.
🔥2👍1
Использование Laravel драйвера centrifugo для широковещания

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

Laravel упрощает передачу событий через WebSocket. Используя Laravel, вы можете транслировать события с сервера на клиент, используя одинаковые имена событий и данные.

Начав интеграцию реального времени в Laravel, обратитесь к документации по широковещанию. Laravel предлагает два серверных драйвера по умолчанию: Pusher Channels и Ably. Основные провайдеры платные, и альтернативы часто зависят от протокола pusher и Laravel Echo. Существуют и другие альтернативы, хотя список их ограничен.
👍6
🚩🚩🚩 Что для вас красные флаги во время интервью/собеседования? Иными словами, какие вещи могут оттолкнуть вас от работодателя?

👇Пишите в комментариях👇

#интерактив
Валидация JSON с помощью JSON Schema и PHP

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

PHP версии 8.3 включает функцию json_validate(), которая позволяет проверять синтаксис JSON. Важно отметить, что json_validate() проверяет только синтаксис JSON, но не его структуру.

Для полной валидации структуры данных в JSON можно использовать пакет swaggest/json-schema. Установка этого пакета выполняется через Composer. Затем можно определить JSON Schema, которая описывает ожидаемую структуру данных.
👍2🔥2
🚩 Как понять, что с компанией точно что-то не так: 11 красных флагов на собеседовании

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

Читать статью
🤔2👍1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🍑 Подборка лучших статей «Библиотеки программиста» за июнь: сохраняй в заметки, чтобы не пропустить #самыйсок

💻 8 причин участвовать в хакатонах
✉️ Как завалить собеседование, даже не начав его: 8 ошибок в сопроводительных письмах
🦅 Делаем нативное мобильное приложение с ИИ и бэкендом
🤖👨‍💻 Пишем Telegram-бота для подготовки к собеседованию на Frontend-разработчика
💵 ТОП-15 самых востребованных профессий в ИТ: куда все катится в 2024 году
🈺 Как перевести все ваши iOS-приложения на 20 языков за 5 минут
🏆👁️ Топовая задачка на Stack Overflow: как найти k пропущенных чисел в потоке данных
🐍🤖💬 Создаём бота-автоответчика для Telegram на ChatGPT и Aiogram 3: пошаговое руководство
🤖🎙️ S.T.A.R.K. — первый фреймворк для создания голосового ассистента
😌 5 техник для снятия стресса на работе
🐍🎓 5 задач для подготовки к собеседованию по Python
⚛️ 6 самых важных шаблонов проектирования в React
💠 Пишем свою нейросеть: пошаговое руководство
🐍🏗️ Основы архитектуры для джунов: построение масштабируемых и чистых приложений на Python
💡 Кем работать в IT, если ты гуманитарий: 10 альтернативных профессий
🎓 Продвинутый SQL: секреты профессионалов
👶 Новичок в компании: 18 советов, как быстро адаптироваться и освоить новые навыки
🛠️ Set в JavaScript: теперь с новыми суперспособностями
⚒️ 10 незаменимых плагинов для VS Code в 2024 году
🐍🕵 5 лучших Python инструментов для специалистов по кибербезопасности
📧 Отклик на вакансию по email: как сделать так, чтобы ваше письмо выделялось
🐍📦 Ваш код достоин PyPI: как правильно опубликовать Python-пакет
🏃 Самоучитель по Go для начинающих. Часть 13. Работа с датой и временем. Пакет time
👋 Slack уходит из России: чем заменить зарубежный сервис
🗣️ «Иногда решение не в изменении системы, а в изменении отношения заказчика». Интервью с системным аналитиком
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🥱2
Решение проблем с правами доступа к логам в Laravel

Основные ошибки включают:

Ошибка «доступ запрещен» (Permission Denied Error):

Причина: Недостаточные права доступа для записи в файлы журнала.

Решение: Установка правильных прав доступа для пользователя веб-сервера (например, www-data на большинстве дистрибутивов Linux) с помощью команд sudo chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache и sudo chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache.

Ошибка «файл не найден» (File Not Found Error):

Причина: Некорректный путь к файлу журнала или удаление файла.

Решение: Проверка конфигурационного файла config/logging.php и создание нового файла журнала с правильными правами с помощью команд touch /var/www/html/storage/logs/laravel.log и sudo chown www-data:www-data /var/www/html/storage/logs/laravel.log.

Проблемы с дисковым пространством:

Причина: Логи могут занимать много места на диске.

Решение: Регулярное мониторинг использования дискового пространства и настройка автоматической ротации логов с помощью таких инструментов, как logrotate.

Подробные шаги по устранению ошибок включают проверку прав доступа, настройку конфигурации логов, мониторинг дискового пространства, проверку содержимого логов и обновление Laravel и его зависимостей.
🥱3👍2😁1
🎁 Telegram Bot API для PHP

Библиотека для удобной работы с Telegram Bot API от Сергея Предводителева, одного из разработчиков Yii3.

⭐️ Полная поддержка API

Полностью поддерживается самая актуальная на текущий момент версия Telegram Bot API 7.7 от 7 июля 2024 года.

⭐️ Лёгкость подключения

Из коробки идёт PSR-клиент, но при желании, можно использовать свой, сделав реализацию интерфейса TelegramClientInterface.

// Telegram bot authentication token
$token = '110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw';

// Dependencies
$streamFactory = new StreamFactory();
$responseFactory = new ResponseFactory();
$requestFactory = new RequestFactory();
$client = new Client($responseFactory, $streamFactory);

// API
$api = new TelegramBotApi(
new PsrTelegramClient(
$token,
$client,
$requestFactory,
$streamFactory,
),
);


⭐️ Типизация

Типизированные PHP-классы для всех типов и методов. Результатом вызова методов API будут соответствующие объекты. Например, в результате отправки сообщения получаем объект Message.

$message = $api->sendMessage(
chatId: 22351,
text: 'Hello, world!',
);


⭐️ Объект Update для обработки вебхука

Update можно создать из PSR-запроса или из JSON-строки:

$update = Update::fromServerRequest($request);
$update = Update::fromJson($jsonString);


⭐️ Логирование

Для логирования запросов к API, результатов ответов и ошибок можно использовать любой PSR-совместимый логгер. Например, Monolog или Yii Log.

/**
* @var TelegramClientInterface $telegramClient
* @var LoggerInterface $logger
*/
$api = new TelegramBotApi(
$telegramClient,
$logger,
);


⭐️ Одобрено разработчиками Telegram

Пакет одобрен разработчиками Telegram и добавлен на сайт telegram.org.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤔5🔥4👏41
С версии Laravel 8.42 в модели Eloquent вы можете определить связь, которая получит самый новый (или самый старший) элемент другой связи.
🥱18👍5🔥5👏4😁1
HTML Embed Code:
2025/07/09 22:56:33
Back to Top