Библиотека пхпшника | 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
Оптимизация ответов API в Laravel с помощью DTO

🔍 Рассмотрим процесс создания и тестирования интеграций с API в Laravel, используя DTO для отображения данных. Начнем с анализа примера ответа от API Google Books при поиске книги «The Ferryman». Затем создадим необходимые DTO для отображения основных и вложенных данных, таких как информация о книге и ссылки на изображения.

🛠️ Предложены методы тестирования, включая предотвращение фактических HTTP-запросов в тестах и создание помощников для генерации фальшивых ответов от API. Каждый этап разработки и тестирования иллюстрируется кодом на языке PHP и тестами с использованием фреймворка Pest.
👍5
Профайлинг Laravel приложений с XDebug и PHPStorm

Здесь рассказывается о важности профилирования приложений перед выпуском ресурсоемкой функциональности и о том, как часто забывают замерять время операций, которые могут превышать ожидание пользователя. Автор, Ваня, PHP-разработчик из Санкт-Петербургского электротехнического университета ЛЭТИ, делится опытом использования XDebug и PHPStorm для удобной отладки PHP-приложений и профилирования их производительности.

Также подробно описывается настройка XDebug, включая изменение режимов работы, директории сохранения профайлов и игнорирование выходных файлов в системе контроля версий. Затем автор переходит к просмотру профайла в PHPStorm, демонстрируя шаги и настройки, необходимые для анализа данных профилирования.

Автор обнаружил, что профайл XDebug не содержит необходимой информации о методе API Laravel из-за особенностей работы сервера PHP. Однако, после небольших изменений в конфигурации XDebug, таких как изменение имени выходного файла, удалось получить полезные данные профайлинга.
8🥱3
Используйте модель shouldBeStrict при запуске нового приложения Laravel.

При начале разработки нового приложения с использованием фреймворка Laravel стоит использовать метод «shouldBeStrict()». Этот метод заключается в включении строгого режима для моделей Eloquent, который обеспечивает несколько важных проверок при работе с моделями.

В частности, он выполняет следующие действия:

1️⃣Предотвращает ленивую загрузку связанных моделей, чтобы избежать избыточных запросов к базе данных.
2️⃣Предотвращает молчаливое отбрасывание атрибутов, которые не являются заполнимыми, что помогает предотвратить потенциальные проблемы безопасности.
3️⃣Предотвращает доступ к отсутствующим атрибутам моделей, что обеспечивает быстрое обнаружение опечаток или ошибок в коде.
👍101
Контроль доступа в Symfony

🔒Контроль доступа позволяет определить права доступа к определенным частям приложения, ограничивая доступ для пользователей без необходимых разрешений.

🛡️Для реализации контроля доступа в Symfony проектах используются два основных подхода:

1️⃣Symfony Firewall: это начальный уровень безопасности маршрутов, добавляющий глобальные правила для всех маршрутов или определенных групп маршрутов. Это позволяет определить, какие URL-адреса требуют проверки безопасности и какие IP-адреса можно добавить в белый список для определенных конечных точек.

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

🛠️ Инструменты и библиотеки для реализации контроля доступа:

ACCENT для проектов с API Platform.
Создание собственного скрипта для проверки контроля доступа к маршрутам.

🔍 Обеспечение безопасности новых маршрутов:

Включение скрипта проверки контроля доступа в непрерывную интеграцию (CI) проекта.
Использование git pre-commit или pre-push хуков.
👍1
Видео: Запуск Laravel в подкаталоге с Nginx

Настройка Nginx таким образом, что Laravel приложение работает в подкаталоге. Это полезно, если у вас есть несколько установок Laravel или если у вас есть второе приложение Laravel, запущенное внутри какого-то подкаталога на вашем сервере.

Например, если ваш основной домен — example.com, а у вас есть второе Laravel приложение, которое вы хотите развернуть по адресу example.com/subdirectory, то с помощью этой конфигурации Nginx вы можете настроить сервер так, чтобы обрабатывать запросы к этому подкаталогу с использованием вашего второго Laravel приложения.
👍7🥱1
Возможности метода цепочки

Метод цепочки (Method chaining) — это техника программирования, которая позволяет вызывать несколько методов объекта в одном операторе. В PHP это достигается путем возврата объекта ($this) из методов, что позволяет последующие вызовы. Метод цепочки улучшает читаемость и эффективность кода. Преимущества включают краткость, читаемость, создание плавных интерфейсов и уменьшение временных переменных. Практические применения включают конфигурацию, построение запросов к базе данных и создание Fluent API. Необходимо избегать чрезмерного использования и комплексности. Использование метода цепочки может значительно улучшить читаемость и поддерживаемость кода на PHP, делая его более выразительным и понятным
🥱8👍31👾1
#дайджест #phpdevjob

Вакансии PHP разработчиков уровня Junior

▪️PHP-программист
Москва. Флюид-Лайн — изготовление и поставка промышленного оборудования
Подробнее

▪️Junior - программист
Казань, SMART-SHOP — поставки электротехнической продукции и оборудования
Подробнее

Вакансии PHP разработчиков уровня Middle

▪️Web-программист
Тула. Contactgroup — продвижение и разработка сайтов
Подробнее

▪️PHP разработчик
Самара, Avenue Media — разработка цифровых продуктов
Подробнее

Вакансии PHP разработчиков уровня Senior

▪️Full Stack PHP Developer
Удаленка. (Офис в Нью-Йорке). Rx2Go — логистическая компания
Подробнее

▪️PHP-разработчик
Удаленка. (Офис в Москве). MODESTO FLOWERS — разработка ПО
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🥱93
Keycode Event Helper

Вспомогательный инструмент, который позволяет легко просматривать информацию о нажатиях клавиш внутри событий JavaScript.
👍2🎉1
Что делает функция «unlink»?

В PHP функция unlink() используется для удаления файла из файловой системы. Она принимает единственный параметр — путь к файлу, который вы хотите удалить. После вызова unlink() попытается удалить указанный файл из файловой системы. В случае успешного выполнения файл будет удален безвозвратно.

Код из примера проверяет, существует ли файл, и если да, то пытается удалить его с помощью unlink(). В случае успешного удаления выводится «Файл успешно удален.»; в противном случае выводится «Ошибка при удалении файла.». Если файл не существует, выводится «Файл не существует.».

#вопросы_с_собеседований
6😁3👍2
Сегодня мы рассмотрим использование буферизации вывода (Output Buffering, OB) в PHP и её нюансы. Буферизация вывода предоставляет удобные инструменты для работы с выводом данных, но может быть сложной для отладки.

Основные моменты:

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

Проблемы с буферами: Необходимость внимательного управления вложенными буферами, проблемы с памятью при обработке больших объемов данных, возможные конфликты при использовании нескольких буферов.

Ошибка «Headers already sent»: Объясняется, как обработка вывода с помощью буферов может предотвратить ошибки с отправкой заголовков до начала вывода данных.

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

Осторожность при использовании: Рекомендуется быть осторожным с использованием нескольких уровней буферизации из-за возможных проблем с обработкой ошибок и неожиданных поведений.

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

Ошибки при использовании обработчиков буфера: Предостережение о том, что использование функции ob_start() внутри обработчиков буфера может вызвать ошибки.
👍3
Logstash, Manticore, Nginx и Symfony: сбор, агрегация и быстрый поиск логов

Идея централизованного мониторинга логов долгое время витала в воздухе, и автору удалось воплотить её в жизнь. Хотя информации о Logstash с Elasticsearch достаточно, настройка с Manticore представляет собой вызов, о котором не так уж много говорят. Здесь рассказывается о настройке и потенциальных подводных камнях пакета Logstash + Manticore + Nginx + Symfony.

Установка и настройка Manticore:
Установка Manticore проста. Скачайте пакет с официального веб-сайта, установите его и настройте с помощью nano /etc/manticoresearch/manticore.conf. Обеспечьте конфигурацию Manticore так, чтобы он слушал соответствующий IP-адрес для подключения с других хостов.

Подготовка логов Nginx:
Настройте Nginx для регистрации в формате JSON для удобного парсинга. Измените формат журнала в /etc/nginx/nginx.conf и обновите блок сервера, чтобы использовать новый формат. Перезапустите Nginx, чтобы начать ведение логов в указанном формате.

Подготовка логов Symfony:
Для Symfony настройте ведение журналов через Monolog Bundle. Настройте формат логов в config/packages/monolog.yaml и создайте пользовательский сервис форматирования. Обеспечьте соответствие типов данных для совместимости с Manticore и Logstash.

Настройка Logstash:
Скачайте соответствующую версию Logstash, совместимую с Manticore. Создайте файл конфигурации Logstash (dev.conf), указав входы для логов Nginx и Symfony, фильтры для обработки логов и выходы для отправки обработанных журналов в Manticore.

Запуск Logstash:
Запустите Logstash с настроенным файлом dev.conf. Устраните любые ошибки, возникающие при запуске, обеспечивая согласованность данных и устраняя любые проблемы с соединением между Logstash и Manticore.

Вся описанная настройка успешно протестирована и развернута, предоставляя возможности централизованного мониторинга журналов. Хотя существуют готовые решения, такие как Kibana и Grafana, настраиваемые решения могут быть разработаны на основе индивидуальных потребностей и предпочтений.
👍3
🤔 Сложно ли поменять технологический стек?

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

✔️ Изучение нового языка
✔️ Ознакомление с экосистемой языка
✔️ Понимание инфраструктуры (сборка, доставка и т. д.)

💬 А вы меняли стек? Сколько времени это заняло?
👍2
Создание инструмента командной строки с помощью PHP и консоли Symfony

🛠️ Здесь рассматривается, как создать простой командный инструмент в PHP с использованием пакета Symfony Console (symfony/console).

🤔 Почему Symfony Console?

🔄 Консольные приложения — универсальный способ автоматизации и взаимодействия с системами.
📦 Symfony Console предоставляет структурированную и богатую функциональность среду разработки.

⚙️ Возможности Symfony Console:

📑 Автоматическая генерация справки: Symfony Console может автоматически создавать понятную и полезную справку для ваших команд.
🎛️ Управление вводом с опциями и аргументами: Простое определение ожидаемых вводов делает команды интуитивно понятными.
🔄 Соблюдение конвенции docopt: Гарантирует согласованный и интуитивный интерфейс для описания функциональности программы.
📝 Значения по умолчанию и валидация ввода: Помогают поддерживать гибкость и предсказуемость поведения команд.
🖥️ Удобные вспомогательные функции: Улучшают взаимодействие с пользователем и оптимизируют процесс разработки.
📂 Структурированные и основанные на классах команды: Облегчают поддержку и расширение командных приложений.

🔧 Установка и создание первой команды:

💻 Установите Symfony Console через Composer.
📂 Создайте первую команду, определив класс и методы для конфигурации и выполнения действий.

Symfony Console значительно упрощает создание командных приложений в PHP, предоставляя эффективные инструменты для автоматизации процессов и управления задачами. 🌟
👍8🥱53
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🏔 Эпикфейл: карьера катится к чертям

🤦‍♂️ У всех нас случались провалы в карьере, о которых не хочется распространяться. Неловкий момент на собеседовании, провал проекта из-за глупой ошибки, конфликт с начальством — такие ситуации хочется поскорее забыть. Однако часто именно они дают нам самые ценные уроки и закаляют как профессионалов.

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

👉 Поделиться историей
😁31
Хостинг статичных Laravel-приложений

Недавно компания Spatie выпустила новый пакет под названием laravel-export, который упаковывает ваше приложение Laravel в статический сайт, который можно хостить. Это отличное дополнение к экосистеме Laravel, поскольку это открывает целый новый способ размещения приложений Laravel.

Этот метод размещения идеально подходит для веб-сайтов, таких как:

🟠блоги
🟠портфолио
🟠посадочные страницы

Которые не зависят от запросов к серверу бэкенда, а отображают статическую информацию.

Здесь показано, как использовать laravel-export для развертывания блога на Cloudflare Pages, Netlify и Vercel.
👍4🤔3
Laravel трюки: автоматическое подключение каналов логирования

В статье представлен метод автоматического подключения каналов логирования в Laravel через использование механизма сервис-контейнеров (DI). Подробно описаны шаги этого метода, начиная с обзора функционала логирования в Laravel и проблемы, связанной с прямым использованием конкретных каналов в классах.

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

Также представлен альтернативный вариант с использованием автопровязывания (Autowiring), где логгер передается в метод класса как аргумент, и определяется правило для сервис-контейнера в AppServiceProvider.
😁8👍2