В Symfony команды обычно записываются через ::
php bin/console tenant:users:import customers.csv
php bin/console tenant users import customers.csv
Оба варианта запускают одну и ту же команду.
Главное отличие — в spaced-синтаксисе каждый уровень может обрабатывать собственные опции:
php bin/console tenant --name=acme users import customers.csv --dry-run
Здесь:
🔘 tenant получает опцию --name;🔘 users — промежуточный уровень;🔘 import запускает конечную команду;🔘 --dry-run передаётся последней команде.
Для доступа к параметрам родительских команд появился CommandChain:
public function __invoke(
CommandChain $chain,
#[Argument] string $file,
): int {
$tenantName = $chain
->getInput('tenant')
?->getOption('name');
// ...
}
Также Symfony 8.2 позволяет описывать целые группы команд в одном классе через #[AsCommand].
📌 Особенно полезно для CLI-приложений с многоуровневой структурой — например, docker compose, git или административных инструментов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😢2
Проверка через
strpos годами путала новичков:
if (strpos($url, 'https') !== false) {
// ...
}
Потому что совпадение в начале строки возвращает позицию
0, а 0 в PHP может трактоваться как false.С PHP 8.0 есть три функции, которые сразу возвращают `bool`:
str_contains($email, '@'); // содержит подстроку
str_starts_with($url, 'https://'); // начинается с
str_ends_with($file, '.pdf'); // заканчивается на
Код читается проще — без проверки позиции и
!== false.📌
strpos всё ещё нужен, если требуется узнать позицию совпадения.Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁20👍3
Было:
framework:
mailer:
dsn: '%env(MAILER_DSN)%’
Стало:
mailer:
dsn: '%env(MAILER_DSN)%’
Старый framework.* при этом продолжает работать — существующие проекты менять не нужно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4👾2
Самые заметные изменения:
Можно зафиксировать часть аргументов функции:
$makeSlug = str_replace(' ', '-', ?);
$makeSlug('Hello World');
// Hello-World
Наконец отдельная функция для ограничения значения:
clamp(101, min: 0, max: 100);
// 100
Тип для представления длительности с наносекундной точностью:
$delay = Duration::fromMilliseconds(100)
->multiplyBy(2 ** $attempt);
public string $name = 'migration’;
И ещё: для новых установок PHP меняет defaults native sessions — strict_mode и HttpOnly включаются, а SameSite становится Lax.
📌 Feature freeze — 22 сентября, первый RC — 24 сентября.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍8🥱4
Плюс десятки фиксов для очередей, Redis, SQLite, Cloud, Artisan, routing и Eloquent.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11🎉6🥱1
При сборке контейнера в debug-режиме появляется:
config/schema.json
— подсказывать доступные параметры;
— показывать описания и значения по умолчанию;
— подсвечивать неизвестные и deprecated-опции;
— проверять типы значений.
php bin/console lint:yaml config/packages/ --check-schema=config/schema.json
Получается довольно практичное улучшение: ошибки в YAML-конфигурации можно поймать ещё до запуска приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Laravel AI SDK позволяет добавлять AI-функции прямо в приложение — без отдельного Python-сервиса и ручной работы с API.
В гайде разобраны практические сценарии:
— автоматический разбор и приоритизация тикетов;
— AI-ассистент с доступом к данным через tools;
— семантический поиск и RAG;
— действия с обязательным подтверждением человека;
— транскрибация голосовых сообщений.
Отдельно показано, как работать со structured output, очередями, фейками для тестов и fallback между провайдерами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
В PHP 8.4 появились array_find(), array_find_key(), array_any() и array_all().
Вместо:
foreach ($users as $user) {
if ($user->isAdmin()) {
$admin = $user;
break;
}
}
можно написать:
$admin = array_find($users, fn($user) => $user->isAdmin());
Мелочь, но код сразу читается как то, что именно мы хотим найти, а не как инструкция для обхода массива.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👏3🤔2👾2❤1
❤️ — 1
🔥 — 2
👍 — 12
👾 — Fatal error
Причём return внутри finally перезаписывает результат, который должен был вернуть try.
⚠️ Ловушка на собесе: если убрать return 2 из finally, функция вернёт 1.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41❤13👍7🤔4
🔐 ramsey/uuid — UUID без самописного кода
Библиотека помогает генерировать, парсить и валидировать UUID, а также работать с ними как с объектами.
Подходит, когда UUID активно используются в проекте и хочется вынести всю работу с ними в готовый инструмент.
🔗 GitHub
🐸 Библиотека пхпшника
Библиотека помогает генерировать, парсить и валидировать UUID, а также работать с ними как с объектами.
use Ramsey\Uuid\Uuid;
$id = Uuid::uuid4();
echo $id->toString();
Подходит, когда UUID активно используются в проекте и хочется вынести всю работу с ними в готовый инструмент.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🌚4❤1🔥1
Http::preventStrayRequests() запрещает тестам обращаться к реальным API.
Например:
Http::preventStrayRequests();
Http::fake([
'example.com/*' => Http::response('ok'),
]);
Http::get('https://example.com/users'); // ✅ ok
Http::get('https://proglib.io'); // ❌ исключение
Так тесты не зависят от доступности внешних сервисов и не отправляют неожиданные запросы в CI.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21
AI уже пишет код. Теперь важнее научиться встраивать его в разработку так, чтобы он действительно экономил время.
На курсе «ИИ для разработчиков» собираете AI-workflow на своём проекте: от задачи и планирования до тестов, ревью и PR🤩
Разберёте AI-агентов, MCP, контекст проекта, безопасность и контроль расходов на модели.
Промокод:
LastcallAIPlease open Telegram to view this post
VIEW IN TELEGRAM
🥱2
Следующий шаг — AI-агенты. Они не просто отвечают на запросы, а сами работают с данными, инструментами и выполняют цепочки действий.
На курсе «Разработка ИИ-агентов» разбираем всё, что нужно для этого уровня:
Курс полностью в записи — проходите материалы в своём темпе, без привязки к расписанию.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱12
Forwarded from Библиотека Go-разработчика | Golang
Перенос MiniJinja с Rust на Go силами Opus и Codex
Около десяти часов работы агента и примерно 45 минут активного участия автора. Так Армин Ронахер оценивает основной перенос MiniJinja с Rust на Go. MiniJinja собирает текст по шаблонам.
Он начал с Opus 4.5 внутри Pi, а оставшиеся исправления тестов передал GPT-5.2 Codex. Рабочая среда оставалась той же; Go-реализацию сверяли с сохранёнными результатами тестов Rust-версии.
По ходу работы агент отказался от проверок, в которых программа должна завершаться ошибкой: текст сообщений не совпадал дословно. Ронахер вмешался и сохранил эти тесты, изменив способ сравнения сообщений.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Около десяти часов работы агента и примерно 45 минут активного участия автора. Так Армин Ронахер оценивает основной перенос MiniJinja с Rust на Go. MiniJinja собирает текст по шаблонам.
Он начал с Opus 4.5 внутри Pi, а оставшиеся исправления тестов передал GPT-5.2 Codex. Рабочая среда оставалась той же; Go-реализацию сверяли с сохранёнными результатами тестов Rust-версии.
По ходу работы агент отказался от проверок, в которых программа должна завершаться ошибкой: текст сообщений не совпадал дословно. Ронахер вмешался и сохранил эти тесты, изменив способ сравнения сообщений.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека Go-разработчика | Golang
Поделитесь своим подходом к работе с нейросетями:
Anonymous Poll
62%
Пользуюсь только чем-то одним для всего подряд
16%
Под каждую задачу подбираю свой инструмент
11%
Сравниваю, что на один и тот же вопрос ответят разные модели
8%
Пока вообще не пользуюсь ИИ
3%
Другое (напишу в комментариях)
Forwarded from Библиотека программиста
Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране?
Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить.
В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео.
Please open Telegram to view this post
VIEW IN TELEGRAM
Clockwork: куда ушло время PHP-запроса
Страница тормозит, а в логах только общий ответ? Clockwork собирает данные о выполнении приложения: запросы к БД, логи, события и timeline. В Laravel интеграция устанавливается через
Свои этапы тоже можно пометить событиями. На карточке — реальная учебная timeline: у
По умолчанию сбор активен в debug-режиме. Для команд и queue jobs нужны настройки. Данные диагностики могут содержать чувствительные значения, поэтому не открывайте интерфейс и метаданные всем пользователям приложения.
Документация и установка Clockwork
Библиотека пхпшника
Страница тормозит, а в логах только общий ответ? Clockwork собирает данные о выполнении приложения: запросы к БД, логи, события и timeline. В Laravel интеграция устанавливается через
composer require itsgoingd/clockwork, собранные запросы можно смотреть на /clockwork.Свои этапы тоже можно пометить событиями. На карточке — реальная учебная timeline: у
import задана задержка, normalize преобразует одну строку. Это помогает отделить этапы, а не гадать по общему времени.По умолчанию сбор активен в debug-режиме. Для команд и queue jobs нужны настройки. Данные диагностики могут содержать чувствительные значения, поэтому не открывайте интерфейс и метаданные всем пользователям приложения.
Документация и установка Clockwork
Библиотека пхпшника
👍4