Как создать агента с помощью Laravel
Недавно Thorsten Ball опубликовал статью «How to Build an Agent», которая быстро стала популярной. Вдохновившись ею, автор адаптировал подход для Laravel, добавив собственные улучшения. Вместо того чтобы обсуждать, какой агент лучше, он предлагает разобраться, как они работают.
Агент — это по сути цикл, который выполняется до достижения поставленной цели. Он использует инструменты (например, функции), заранее определённые в коде, и вызывает их при необходимости. Это позволяет модели LLM выполнять действия, выходящие за пределы её контекста.
Для создания агента в Laravel необходимо:
🔸 Установить пакет PrismPHP для работы с LLM.
🔸 Создать команду с помощью Artisan:
🔸 Настроить взаимодействие с LLM, например, с использованием API Anthropic или OpenAI.
🔸 Добавить инструменты (tools) для работы с кодом, такие как чтение, редактирование и перечисление файлов.
Пример кода агента, который может создавать и редактировать файлы в проекте, приведён в статье: How to Build an Agent with Laravel.
Библиотека пхпшника #буст
Недавно Thorsten Ball опубликовал статью «How to Build an Agent», которая быстро стала популярной. Вдохновившись ею, автор адаптировал подход для Laravel, добавив собственные улучшения. Вместо того чтобы обсуждать, какой агент лучше, он предлагает разобраться, как они работают.
Агент — это по сути цикл, который выполняется до достижения поставленной цели. Он использует инструменты (например, функции), заранее определённые в коде, и вызывает их при необходимости. Это позволяет модели LLM выполнять действия, выходящие за пределы её контекста.
Для создания агента в Laravel необходимо:
🔸 Установить пакет PrismPHP для работы с LLM.
🔸 Создать команду с помощью Artisan:
php artisan make:command Agent
.🔸 Настроить взаимодействие с LLM, например, с использованием API Anthropic или OpenAI.
🔸 Добавить инструменты (tools) для работы с кодом, такие как чтение, редактирование и перечисление файлов.
Пример кода агента, который может создавать и редактировать файлы в проекте, приведён в статье: How to Build an Agent with Laravel.
Библиотека пхпшника #буст
🤔3❤🔥2
Настояться — идеальная стратегия, как минимум в половине случаев решение вообще не нужно принимать, т. к. проблема решается сама собой.
🤔 Или нет?
🐸 Библиотека пхпшника #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🎨 Автодополнение классов Tailwind CSS
Если вы используете Tailwind CSS, PhpStorm поддерживает интеллектуальное автодополнение классов прямо в HTML‑файлах. Это особенно удобно, когда вы работаете с динамическими классами или кастомными конфигурациями.
🔧 Как настроить:
Убедитесь, что у вас установлен и активирован плагин HTML Tools. Это можно проверить в настройках:
PhpStorm автоматически распознаёт классы Tailwind CSS и предлагает автодополнение, подсветку синтаксиса и линтинг прямо в редакторе.
📌 Благодаря этому:
🔸 Вы получаете подсказки по доступным классам и их параметрам.
🔸 Ускоряется процесс написания стилей без необходимости переключаться между редактором и документацией.
🔸 Улучшается качество кода за счёт встроенной проверки на ошибки.
Библиотека пхпшника #буст
Если вы используете Tailwind CSS, PhpStorm поддерживает интеллектуальное автодополнение классов прямо в HTML‑файлах. Это особенно удобно, когда вы работаете с динамическими классами или кастомными конфигурациями.
🔧 Как настроить:
Убедитесь, что у вас установлен и активирован плагин HTML Tools. Это можно проверить в настройках:
Ctrl+Alt+S
→ Plugins → HTML Tools.PhpStorm автоматически распознаёт классы Tailwind CSS и предлагает автодополнение, подсветку синтаксиса и линтинг прямо в редакторе.
📌 Благодаря этому:
🔸 Вы получаете подсказки по доступным классам и их параметрам.
🔸 Ускоряется процесс написания стилей без необходимости переключаться между редактором и документацией.
🔸 Улучшается качество кода за счёт встроенной проверки на ошибки.
Библиотека пхпшника #буст
👍1
🔐 Баг-хантеры, будьте готовы: критическая уязвимость в RainLoop обнаружена!
Недавно один из участников программы Bug Bounty нашёл уязвимость в популярном, но устаревшем почтовом клиенте RainLoop. После быстрого реагирования, Beget принял решение отказаться от использования этого клиента и перевести всех пользователей на поддерживаемое решение.
💥 Как это произошло?
Исследователь, обнаружив уязвимость, нашёл путь для выполнения произвольных команд через уязвимость в функции десериализации. Вскоре стало понятно, что с помощью SSRF можно было бы легко обойти все защиты и получить доступ к конфиденциальным данным. В результате он получил доступ к важной информации пользователей компании, что подняло случай до уровня критической уязвимости.
🎉 Реакция Beget
Компания оперативно отреагировала на баг и даже назначила награду исследователю за его находку. Это подтверждает важность таких инициатив в сфере безопасности.
💡 Выводы
Этот случай ещё раз подтверждает, что старые, казалось бы, заброшенные проекты могут содержать серьёзные угрозы. Важно не останавливаться на достигнутом и постоянно проверять безопасность своих сервисов.
🔗 Хабр
Библиотека пхпшника
Недавно один из участников программы Bug Bounty нашёл уязвимость в популярном, но устаревшем почтовом клиенте RainLoop. После быстрого реагирования, Beget принял решение отказаться от использования этого клиента и перевести всех пользователей на поддерживаемое решение.
💥 Как это произошло?
Исследователь, обнаружив уязвимость, нашёл путь для выполнения произвольных команд через уязвимость в функции десериализации. Вскоре стало понятно, что с помощью SSRF можно было бы легко обойти все защиты и получить доступ к конфиденциальным данным. В результате он получил доступ к важной информации пользователей компании, что подняло случай до уровня критической уязвимости.
🎉 Реакция Beget
Компания оперативно отреагировала на баг и даже назначила награду исследователю за его находку. Это подтверждает важность таких инициатив в сфере безопасности.
💡 Выводы
Этот случай ещё раз подтверждает, что старые, казалось бы, заброшенные проекты могут содержать серьёзные угрозы. Важно не останавливаться на достигнутом и постоянно проверять безопасность своих сервисов.
🔗 Хабр
Библиотека пхпшника
❤1👍1
🧑💻 Что за ужас тут творится
Когда вы приходите в новый коллектив, легко заподозрить, что всё вокруг катится кувырком. Но возможно, вы ещё не разобрались во внутренних механизмах.
К нам пришёл подписчик с вопросом
На практике важно учитывать сразу несколько аспектов, чтобы не спешить с выводами:
— Обратите внимание на то, как принимаются решения: формально через руководителей или неформально «по знакомству».
— Оцените, насколько корректно используется трекинг задач и документация — это показатель зрелости команды.
— Внимательно слушайте, какие вопросы задают другие: открыты ли коллеги к диалогу или предпочитают «молча работать».
— Спросите про KPI и цели: ясны ли вам критерии успеха и пути их достижения?
Помните, никто не идеален: везде есть проблемы, просто о них не все говорят.
💬 С какими «тревожными звоночками» вы сталкивались в новых командах? Поделитесь в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
🐸 Библиотека пхпшника #междусобойчик
Когда вы приходите в новый коллектив, легко заподозрить, что всё вокруг катится кувырком. Но возможно, вы ещё не разобрались во внутренних механизмах.
К нам пришёл подписчик с вопросом
Как отличить реальные проблемы в компании от простого непонимания процессов и культуры?
На практике важно учитывать сразу несколько аспектов, чтобы не спешить с выводами:
— Обратите внимание на то, как принимаются решения: формально через руководителей или неформально «по знакомству».
— Оцените, насколько корректно используется трекинг задач и документация — это показатель зрелости команды.
— Внимательно слушайте, какие вопросы задают другие: открыты ли коллеги к диалогу или предпочитают «молча работать».
— Спросите про KPI и цели: ясны ли вам критерии успеха и пути их достижения?
Помните, никто не идеален: везде есть проблемы, просто о них не все говорят.
💬 С какими «тревожными звоночками» вы сталкивались в новых командах? Поделитесь в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Dead code detector
Библиотека для обнаружения неиспользуемого кода с помощью расширения PHPStan. Обнаруживает мертвые циклы, поддерживает такие библиотеки, как Symfony, Doctrine, PHPUnit и др. Может автоматически удалять неиспользуемый PHP-код.
Легко установить через:
🔗 Github
Библиотека пхпшника #инструменты
Библиотека для обнаружения неиспользуемого кода с помощью расширения PHPStan. Обнаруживает мертвые циклы, поддерживает такие библиотеки, как Symfony, Doctrine, PHPUnit и др. Может автоматически удалять неиспользуемый PHP-код.
Легко установить через:
composer require --dev shipmonk/dead-code-detector
🔗 Github
Библиотека пхпшника #инструменты
💯4
Forwarded from Библиотека задач по PHP | тесты, код, задания
Чтобы подтвердить адрес электронной почты, какой флаг должен быть передан функции filter_var()?
Anonymous Quiz
14%
FILTER_VALIDATE_MAIL
17%
VALIDATE_EMAIL
63%
FILTER_VALIDATE_EMAIL
5%
VALIDATE_MAIL
How to: миграция больших баз данных в Laravel
Статья описывает стратегию миграции больших баз данных в Laravel без простоя и с минимальным риском ошибок, подходящую для высоконагруженных приложений. Основная цель — избежать блокировок таблиц, сбоев и ошибок во время трафика, что критично для таких систем, как электронная коммерция или банковские приложения.
Основная стратегия — это метод «Double Write + Backfill», который включает несколько шагов:
1. Добавление новых колонок или таблиц без удаления старых, чтобы данные продолжали работать.
2. Реализация логики «двойной записи»: во время обновлений и вставок данных записываются в обе колонки (старую и новую).
3. Заполнение новых данных с помощью команд Artisan для миграции существующих записей.
4. Подготовка плана отката на случай ошибок.
5. Переход на новую структуру после завершения миграции и перехода всех данных.
🔗 Medium
Библиотека пхпшника
Статья описывает стратегию миграции больших баз данных в Laravel без простоя и с минимальным риском ошибок, подходящую для высоконагруженных приложений. Основная цель — избежать блокировок таблиц, сбоев и ошибок во время трафика, что критично для таких систем, как электронная коммерция или банковские приложения.
Основная стратегия — это метод «Double Write + Backfill», который включает несколько шагов:
1. Добавление новых колонок или таблиц без удаления старых, чтобы данные продолжали работать.
2. Реализация логики «двойной записи»: во время обновлений и вставок данных записываются в обе колонки (старую и новую).
3. Заполнение новых данных с помощью команд Artisan для миграции существующих записей.
4. Подготовка плана отката на случай ошибок.
5. Переход на новую структуру после завершения миграции и перехода всех данных.
🔗 Medium
Библиотека пхпшника
❤4
Последний шанс залутать курсы Proglib Academy с выгодой 40% и пожизненным доступом.
До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.
Выбираем и забираем 👈
P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.
Выбираем и забираем 👈
P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
🥱2❤1👏1😁1
В PHP 8.5 появится опция INI Diff
Статья объясняет, как в PHP 8.5 с помощью опции
🔗 Читать статью
Библиотека пхпшника
Статья объясняет, как в PHP 8.5 с помощью опции
--ini=diff
можно легко выявить изменения в INI-конфигурации, которые отличаются от стандартных значений. Эта возможность полезна для отслеживания изменений в конфигурации PHP без необходимости вручную сравнивать текущие значения с настройками по умолчанию. Пример показан на Docker-контейнере с PHP 8.5, где можно увидеть, как изменения INI-файлов, например, в настройке memory_limit
, отображаются при запуске контейнера. В статье также приводятся шаги для создания Docker-образа, который позволяет экспериментировать с этими новыми функциями.🔗 Читать статью
Библиотека пхпшника
👍17🔥7❤2
🧪 Команда дня: Запуск тестов только одного файла
📌 Команда:
Где
🔍 Зачем это нужно?
При разработке или рефакторинге кода часто возникает необходимость быстро проверить работу конкретного теста или группы тестов. Запуск всех тестов может занять много времени, особенно в больших проектах. Используя команду выше, вы можете выполнить только нужный файл тестов, что ускоряет процесс разработки и отладки.
📝 Пример:
Предположим, у вас есть файл с тестами
Это выполнит все тесты, определённые в классе
⚙️ Дополнительные опции:
Запуск конкретного метода теста:
Если вы хотите выполнить только один метод теста из класса, используйте параметр
Замените
Использование регулярных выражений:
Параметр
Это полезно, если вы хотите выполнить группу тестов, соответствующих определённому шаблону.
💡 Советы:
Проверка синтаксиса перед запуском:
Перед выполнением тестов рекомендуется проверить синтаксис PHP-файла:
Это поможет избежать ошибок при запуске тестов.
Использование в CI/CD:
Если вы интегрируете тесты в систему непрерывной интеграции, убедитесь, что пути к тестовым файлам указаны корректно, и используйте соответствующие команды для запуска отдельных тестов или групп тестов.
📌 Команда:
phpunit путь/к/файлу/ТестКласс.php
Где
ТестКласс.php
— это файл с тестами, который вы хотите запустить.🔍 Зачем это нужно?
При разработке или рефакторинге кода часто возникает необходимость быстро проверить работу конкретного теста или группы тестов. Запуск всех тестов может занять много времени, особенно в больших проектах. Используя команду выше, вы можете выполнить только нужный файл тестов, что ускоряет процесс разработки и отладки.
📝 Пример:
Предположим, у вас есть файл с тестами
UserTest.php
в директории tests/Feature/
. Чтобы запустить только этот файл, выполните:phpunit tests/Feature/UserTest.php
Это выполнит все тесты, определённые в классе
UserTest
, и выведет результаты в консоль.⚙️ Дополнительные опции:
Запуск конкретного метода теста:
Если вы хотите выполнить только один метод теста из класса, используйте параметр
--filter
с указанием имени метода:phpunit --filter testMethodName путь/к/файлу/ТестКласс.php
Замените
testMethodName
на имя метода, который вы хотите запустить.Использование регулярных выражений:
Параметр
--filter
поддерживает регулярные выражения. Например, чтобы запустить все методы, начинающиеся с testUser
, используйте:phpunit --filter '/^testUser/' путь/к/файлу/ТестКласс.php
Это полезно, если вы хотите выполнить группу тестов, соответствующих определённому шаблону.
💡 Советы:
Проверка синтаксиса перед запуском:
Перед выполнением тестов рекомендуется проверить синтаксис PHP-файла:
php -l путь/к/файлу/ТестКласс.php
Это поможет избежать ошибок при запуске тестов.
Использование в CI/CD:
Если вы интегрируете тесты в систему непрерывной интеграции, убедитесь, что пути к тестовым файлам указаны корректно, и используйте соответствующие команды для запуска отдельных тестов или групп тестов.
🥱7❤1
🚀 Pipe operator в PHP 8.5 — меньше вложенности, больше читаемости
PHP 8.5 завез мощную штуку — оператор пайпа (|>), и это реально меняет стиль кода.
Раньше:
Или ещё хуже — с кучей временных переменных:
Теперь:
Каждая операция читается как шаг рецепта — слева направо. Код становится декларативным, не запутанным и без временных переменных.
🎯 Реальный пример: обработка email'а из формы
🔥 Минимум шума, максимум сути.
Pipe — мелкая синтаксическая штука, но она делает код ближе к тому, как вы мыслите.
С PHP 8.5 пишем как люди.
🐸 Библиотека пхпшника
PHP 8.5 завез мощную штуку — оператор пайпа (|>), и это реально меняет стиль кода.
Раньше:
$result = trim(str_shuffle(strtoupper("Hello World")));
Или ещё хуже — с кучей временных переменных:
$result = "Hello World";
$result = strtoupper($result);
$result = str_shuffle($result);
$result = trim($result);
Теперь:
$result = strtoupper("Hello World")
|> str_shuffle(...)
|> trim(...);
Каждая операция читается как шаг рецепта — слева направо. Код становится декларативным, не запутанным и без временных переменных.
🎯 Реальный пример: обработка email'а из формы
$result = $_REQUEST['email']
|> fn($e) => strtolower($e)
|> fn($e) => filter_var($e, FILTER_VALIDATE_EMAIL)
|> fn($e) => sendEmail($e, "Welcome!");
echo $result ? "Sent!" : "Error";
🔥 Минимум шума, максимум сути.
Pipe — мелкая синтаксическая штука, но она делает код ближе к тому, как вы мыслите.
С PHP 8.5 пишем как люди.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🤔10🔥8😢7😍1
💡 Чего мы ждём от обновлений
PHP активно развивается и курс этого развития зависит от сообщества. Давайте поделимся какие фичи ждём в следующем обновлении.
Например:
🐸 Библиотека пхпшника #междусобойчик
PHP активно развивается и курс этого развития зависит от сообщества. Давайте поделимся какие фичи ждём в следующем обновлении.
Например:
Асинхронность на уровне ядра: встроенная поддержка async/await упростит написание многозадачного кода.
Расширенный стандарт утилит: Больше array_*, инструменты инспекции, удобная дебага
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🐕🦺 Пет-проекты в резюме: как превратить фриланс и side-проекты в карьерный козырь
💻 Пилишь бота, калькулятор, парсер…
А потом открываешь резюме — и внезапно показать нечего. На самом деле твой неформальный опыт — это не «поигрался с кодом», а боевая прокачка. Главное — правильно оформить:
🛠 Пет-проекты, в которые ты вложил душу — это не хобби, это MVP
🕵️ Side-проекты — это не «с друзьями запускали что-то», а «работал в кросс-функциональной команде»
💸 Фриланс через брата жены — это тоже фриланс (и почти стартап)
⚡️ В статье:
— как вписать неформальный опыт в резюме без ощущения, что ты его придумываешь на ходу;
— как не испортить впечатление фразой «проект недоделан, но идея крутая»;
— как показать, что ты не просто что-то писал — ты решал задачи.
В общем, если твой гитхаб похож на кладбище хороших идей — пора его оцифровать в карьерный актив🧠
🔗 Читать статью
🐸 Библиотека программиста
💻 Пилишь бота, калькулятор, парсер…
А потом открываешь резюме — и внезапно показать нечего. На самом деле твой неформальный опыт — это не «поигрался с кодом», а боевая прокачка. Главное — правильно оформить:
🛠 Пет-проекты, в которые ты вложил душу — это не хобби, это MVP
🕵️ Side-проекты — это не «с друзьями запускали что-то», а «работал в кросс-функциональной команде»
💸 Фриланс через брата жены — это тоже фриланс (и почти стартап)
⚡️ В статье:
— как вписать неформальный опыт в резюме без ощущения, что ты его придумываешь на ходу;
— как не испортить впечатление фразой «проект недоделан, но идея крутая»;
— как показать, что ты не просто что-то писал — ты решал задачи.
В общем, если твой гитхаб похож на кладбище хороших идей — пора его оцифровать в карьерный актив
Please open Telegram to view this post
VIEW IN TELEGRAM
«Что дал переход на zsh мне, как разработчику?»
Когда-то многие из нас просто писали команды в bash и не задумывались. Но однажды в команде сказали: «Ставь zsh — будет лучше». Почему? Аргументов не дали. Сегодня восполняем этот пробел — и особенно это будет полезно PHP-разработчикам.
🖥️Что такое Zsh?
Это оболочка, как и bash, только... мощнее. Благодаря плагинам, темам и расширениям zsh превращает ваш терминал в полноценный dev-инструмент. А если установить
— автокомплит команд по истории (как в IDE)
— подсветка синтаксиса прямо в консоли
— алиасы:
— темы вроде powerlevel10k: кастомизация отображения веток, путей, статуса команд
А главное — вся эта магия работает из коробки, стоит лишь включить нужные плагины и чуть поднастроить
👉 Хабр
Когда-то многие из нас просто писали команды в bash и не задумывались. Но однажды в команде сказали: «Ставь zsh — будет лучше». Почему? Аргументов не дали. Сегодня восполняем этот пробел — и особенно это будет полезно PHP-разработчикам.
🖥️Что такое Zsh?
Это оболочка, как и bash, только... мощнее. Благодаря плагинам, темам и расширениям zsh превращает ваш терминал в полноценный dev-инструмент. А если установить
Oh My Zsh
, становится еще проще:— автокомплит команд по истории (как в IDE)
— подсветка синтаксиса прямо в консоли
— алиасы:
gl
вместо git pull
, ci
вместо composer install
, и так далее— темы вроде powerlevel10k: кастомизация отображения веток, путей, статуса команд
А главное — вся эта магия работает из коробки, стоит лишь включить нужные плагины и чуть поднастроить
.zshrc
.👉 Хабр
❤1
🌗 Айтишный культ темной темы в IDE
Темная тема давно стала визуальной нормой для нас — кто-то включил один раз и больше не возвращался. А кто-то сидит на светлой и не видит смысла менять.
➖ За темную:
— Не слепит в темноте
— Глаза устают меньше
— Просто красиво
➖ За светлую:
— Лучше читается при дневном свете
— Меньше проблем с контрастом
— Привычнее для документации и веба
❓ А какой темой пользуетесь вы? Делитесь в коммментариях!
🐸 Библиотека пхпшника #междусобойчик
Темная тема давно стала визуальной нормой для нас — кто-то включил один раз и больше не возвращался. А кто-то сидит на светлой и не видит смысла менять.
— Не слепит в темноте
— Глаза устают меньше
— Просто красиво
— Лучше читается при дневном свете
— Меньше проблем с контрастом
— Привычнее для документации и веба
Please open Telegram to view this post
VIEW IN TELEGRAM
1🌚28❤2🤩2
💻 Подборка новостей по PHP за неделю:
🔹 Laravel 12.21 — появились атрибуты
🔹 Symfony 21–27 июля — активная подготовка к релизам Symfony 7.4 и 8.0: добавлен
🔹 PHP 8.5.0 Alpha 2 — вышла вторая альфа-версия, приглашают к тестированию.
🔹 Livewire уязвимость (CVE-2025-54068) — версии до 3.6.3 уязвимы к удалённому выполнению команд через обновление свойств компонента. Обновитесь немедленно.
🔹 Symfony AI — новые компоненты для интеграции AI в PHP-приложения, от низкоуровневых библиотек до бандлов.
Библиотека пхпшника #свежак
🔹 Laravel 12.21 — появились атрибуты
Singleton
и Scoped
для контейнера, метод query builder для проверки значений между двумя колонками, строгая валидация чисел и булевых значений.🔹 Symfony 21–27 июля — активная подготовка к релизам Symfony 7.4 и 8.0: добавлен
ObjectMapperAwareInterface
, улучшены JsonStreamer
и AssetMapper
, удалены устаревшие фичи, включая автоматическое отображение Doctrine entity.🔹 PHP 8.5.0 Alpha 2 — вышла вторая альфа-версия, приглашают к тестированию.
🔹 Livewire уязвимость (CVE-2025-54068) — версии до 3.6.3 уязвимы к удалённому выполнению команд через обновление свойств компонента. Обновитесь немедленно.
🔹 Symfony AI — новые компоненты для интеграции AI в PHP-приложения, от низкоуровневых библиотек до бандлов.
Библиотека пхпшника #свежак
🔥3🥰1