Laravel & PHP Deep — фреймворки и пакеты
189 subscribers
90 photos
18 videos
1 file
238 links
PHP-стек: Laravel, Symfony, Composer, Octane, Filament, Livewire. Релизы, security advisories, лучшие пакеты для трекеров/CRM/арб-инфры. Тестирование, деплой, performance.
Канал сети public.tg.
Download Telegram
PHPUnit ломается не в тестах, а в договорённостях команды

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

Что держать в порядке:
— тестируйте поведение, а не реализацию;
— не смешивайте в одном тесте много причин падения;
— фикстуры делайте короткими и явными;
— моки ставьте только там, где есть внешний эффект или дорогая зависимость.

Отдельная ловушка — хрупкие assertions. Если тест проверяет массив целиком, строку целиком и ещё внутренние вызовы, он начинает падать от безобидного рефакторинга. Лучше проверять контракт: вход, выход, побочный эффект. Для Laravel-проектов это особенно заметно в сервисах, job’ах и интеграционных тестах.

И ещё правило: если тест нельзя прочитать за 10 секунд, его надо упростить. Хороший набор PHPUnit — это не максимум покрытия, а минимальный набор проверок, который ловит регрессии и не мешает двигать код.
Forwarded from high profit — low life
⚡️ AffPapa теперь официально принадлежит Иванову

Евгений Юрьич продолжает издеваться над опозорившимся этим летом AffPapa. Вслед за базой контактов к маэстро ушел еще и товарный знак конторы...

Как проверить:

1. Перейти по ссылке
2. Ввести 2026793242
3. Ахуеть от беспомощности AffPapa

Такие сегодня новости, такая life...

High Profit — Low Life | Прислать сплетню
Forwarded from В арбитраже денег нет?
ЕЮ Иванов продолжает кошмарить АффПапу, конторку, которая накинула говна на вентилятор этим летом. Тогда в AffPapa не знали, с каким говном идут бодаться, поэтому заслуженно проиграли. 😏

На этот раз ЕЮ зарегал товарный знак AffPapa — совсем скоро имя компании будет официально принадлежать ему. Чтобы убедиться в трушности мува, переходим по ссыл-Очке и вводим серийный номер: 2026793242. Там видим, что заявка на регистрацию подана лично Евгением Юрьичем.

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

В арбитраже денег нет 💵
PHP в проде ломается не из-за синтаксиса, а из-за границ процесса

В PHP легко забыть, что каждый request — отдельная жизнь, но окружение вокруг него общее: FPM-пулы, opcache, очереди, cron, файловая система, Redis. Баги чаще сидят не в контроллере, а на стыке.

Проверяйте границы явно:
— таймауты HTTP-клиентов и БД не должны быть «по умолчанию»;
— запись файлов только через атомарную замену, не поверх существующего;
— lock для cron/queue-задач, которые нельзя выполнять параллельно;
— idempotency key для платежей, постбеков, вебхуков;
— отдельные лимиты памяти для воркеров, не копия настроек FPM.

Есть наблюдение которое стоит проверить: если код нельзя безопасно перезапустить в середине операции, это не бизнес-логика, а лотерея. Особенно в импортах, биллинге, рассылках и синхронизациях CRM.

Хороший PHP-сервис проектируется не вокруг «быстрого ответа», а вокруг повторяемости: упал процесс, повторился job, пришёл дубль вебхука — данные остались консистентными.
5 PHP-пакетов, которые стоит оценивать не по звуку, а по внедрению

В PHP легко залипнуть на «популярное». Но пакет в проде ценят не за звёзды, а за предсказуемость: понятный API, стабильные зависимости, нормальные тесты и вменяемую поверхность ошибок.

— если пакет тащит половину фреймворка ради одной задачи, он дорог в сопровождении;
— если у него нет явной точки расширения, вы быстро упрётесь в fork;
— если документация не объясняет edge cases, интеграция съест больше времени, чем сама разработка.

Смотрите на три вещи: как пакет живёт с Composer constraints, есть ли у него отдельные конфиги/контракты, и можно ли его отключить без переписывания домена. Хороший пакет не должен заставлять вас менять архитектуру под себя; он должен встраиваться в уже принятую модель.

Ещё один фильтр — тестируемость. Если сервис сложно мокать, события не изолируются, а side effects размазаны по хендлерам, пакет будет мешать CI и замедлять рефакторинг.

Берите только то, что можно удалить без боли: тогда пакет помогает продукту, а не становится его скрытой зависимостью.
Spatie — не “пакеты для красоты”, а готовые кирпичи для продакшена

У Spatie сильная сторона простая: почти каждый пакет закрывает один повторяющийся кусок инфраструктуры. Медиа-библиотека, роли и permissions, activity log, backup, sitemap, data transfer objects — вместо самописной обвязки берёте проверенный слой и не тратите недели на поддержку.

Есть правило, которое экономит много времени: сначала смотрим на границы домена, потом на пакет. Если задача сводится к “CRUD + хранение метаданных + события”, Spatie часто подходит. Если там жёсткая бизнес-логика, нестандартные права или сложные транзакции — пакет лучше использовать как низкоуровневую опору, а не как готовый фреймворк внутри фреймворка.

Перед подключением проверьте три вещи:
• как пакет хранит данные и можно ли жить с его схемой;
• есть ли у него события/хуки для вашей интеграции;
• не ломает ли он тесты, очереди и деплой из-за скрытой магии.

Самая частая ошибка — тащить Spatie “на всякий случай”. В таком режиме код быстро превращается в набор зависимостей, которые трудно менять. Нормальный подход другой: пакет должен убрать рутину, а не забрать архитектуру.

Если пакет можно объяснить одной фразой и он закрывает повторяющуюся боль без лишней магии — это хороший кандидат. Если приходится долго подгонять его под себя, дешевле собрать свой тонкий слой поверх понятных примитивов.
PHP ломается не в синтаксисе, а в мелочах вокруг типов и ошибок

За неделю в репах: большая часть «непонятных багов» в PHP обычно сводится к трём вещам — смешали null и пустую строку, не зафиксировали тип на границе слоя, проглотили исключение и пошли дальше.

Есть наблюдение которое стоит проверить: код становится стабильнее не от «больше if-ов», а от жёстких правил на входе и выходе. Для этого:
— включайте strict types там, где это не ломает легаси;
— нормализуйте входные данные до бизнес-логики;
— не возвращайте mixed без причины;
— исключения либо обрабатываются, либо поднимаются выше, но не исчезают в логах-тишине.

Вторая зона риска — неочевидные преобразования. Строка "0", пустой массив и false в PHP легко дают разные ветки там, где автор кода ожидал один сценарий. Если условие влияет на деньги, права доступа или статус заказа, проверяйте его отдельно и явно.

Третья привычка, которая экономит часы: не смешивайте в одном методе валидацию, расчёт и запись в БД. Когда слой делает только одно дело, его проще тестировать, а баги быстрее локализуются.

Если хотите меньше сюрпризов в проде, начните не с переписывания всего проекта, а с границ: типы, ошибки, нормализация входа. Именно там PHP чаще всего показывает характер.
Forwarded from Natalia
ВПЕРВЫЕ! ТОЛЬКО ОДИН ВЕЧЕР!

🫥ПИАР-ВОЙС В ЭТОМ ЧАТЕ🫥

Участников никто не знает.
Откуда они? Хуй его знает.
Темы — просто пиздец!

• Аналитика на двух лидах
• Слив анлим бюджетов
• Как просрать медийку
• Где найти нормальную работу

• Как закупиться себе в карман

Все это для тех, кто придет на ВОЙС
Как делать PR, маркетинг и деньги в арбитраже трафика

На котором обсудим:
• На что компании еще готовы тратить деньги
• За чье внимание мы вообще конкурируем
• Что действительно работает, а что сливает бабки
• PR vs маркетинг
• Как измерить результаты кампейнов
• Что делать с запросом «хочу, чтобы про нас все знали»


Модераторы: @adv_god @natnetak

NO RESPECT CHAT • 27.08 • 19:00 GMT+3
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from AffPapa! Клуб спящих бизнесменов! Потрачено!
Иногда мне кажется, что я работаю не в iGaming, а в похоронном бюро.

Каждый день кто-то приносит очередной продукт и говорит: «У нас почему-то падает LTV.»

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

Просто никто не слушал.

Я — Head of Retention. И в своём канале разбираю ошибки, из-за которых команды месяцами теряют LTV, даже не замечая этого.
7 PHP-пакетов, которые экономят часы на типовых веб-проектах

Если стек крутится вокруг Laravel или Symfony, часть рутины лучше отдавать пакетам, а не писать руками. Но брать нужно не «популярное», а то, что закрывает повторяемую боль и не тащит за собой лишнюю магию.

— spatie/laravel-permission: роли и права без самописных таблиц и хрупких проверок в контроллерах.
— spatie/laravel-data: DTO и валидация входа без каши из массивов.
— livewire/livewire: когда нужна реактивность без отдельного фронтенд-слоя.
— filament/filament: админки и внутренние панели быстрее, чем собирать CRUD вручную.
— league/flysystem: единый слой для файловых хранилищ, чтобы не привязываться к одному драйверу.
— symfony/process: безопаснее запускать внешние процессы и воркеры.
— pestphp/pest или phpunit/phpunit: тесты должны быть частью рутины, а не отдельной церемонией.

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

Перед подключением смотрите на API, частоту breaking changes, качество доков и то, можно ли жить без пакета через год. Лучший пакет — тот, который легко удалить, если он перестал быть нужен.
PHP-проект ломается не из-за фреймворка, а из-за этих 5 привычек

За неделю в репах: один и тот же набор ошибок. Код работает, пока проект маленький, а потом начинается магия с багами, долгими релизами и «у меня локально всё ок».

• Смешивают бизнес-логику с контроллерами и шаблонами — в итоге невозможно тестировать без боли.
• Не фиксируют зависимости в composer.lock и тянут случайные обновления через край.
• Пишут запросы к БД в циклах, а потом удивляются, почему всё тормозит.
• Игнорируют кэш, очереди и фоновые задачи, хотя именно они снимают нагрузку.
• Лепят глобальные helper’ы и статические вызовы там, где нужен явный контракт.

Есть наблюдение которое стоит проверить: чем меньше магии в PHP-коде, тем проще его сопровождать. Сервисный слой, DTO, понятные интерфейсы и тесты на границах системы почти всегда дешевле, чем «быстрое решение» на коленке.

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

В коммерческом PHP главный источник боли — смешанные ответственности. Когда в одном методе живут HTTP, валидация, бизнес-решение, SQL и отправка события, тестировать уже нечего: остаётся молиться на happy path.

Минимальная схема, которая окупается даже в маленьком проекте:
— контроллер принимает запрос и отдаёт ответ;
— FormRequest/DTO нормализует вход;
— action/service принимает чистые данные;
— query object прячет сложный SELECT;
— событие или джоба уносит побочные эффекты.

Есть наблюдение которое стоит проверить: если метод нельзя вызвать из CLI или теста без Request, Auth и контейнерной магии — это не бизнес-логика, а обработчик веб-слоя. Такой код мешает переиспользованию в API, очередях и админке.

Не надо строить «энтерпрайз» ради формы на два поля. Но границы лучше вводить там, где есть деньги: создание лида, расчёт комиссии, смена статуса, биллинг, антифрод.

Хороший PHP-проект читается по направлению зависимостей: веб-слой снаружи, доменные решения внутри. Если это видно без открытия половины репозитория — команда уже сэкономила себе будущий рефакторинг.
7 PHP-пакетов, которые экономят недели на CRM, трекинге и интеграциях

За неделю в репах чаще всего всплывают одни и те же задачи: логирование, очереди, вебхуки, экспорт, авторизация, поиск, отчёты. И почти в каждой из них не нужно писать своё с нуля — дешевле собрать стек из проверенных пакетов.

spatie/laravel-permission — роли и права без самодельных таблиц и костылей в middleware
spatie/laravel-query-builder — фильтры, сортировки и include без жирных контроллеров
spatie/laravel-activitylog — аудит действий для CRM, админок и кабинетов
maatwebsite/excel — импорт и экспорт, когда бизнес просит «просто выгрузить в Excel»
laravel/sanctum — токены для внутренних API и сервисных интеграций
laravel/horizon — наблюдаемость очередей, если фоновые задачи уже стали критичны
guzzlehttp/guzzle — базовый HTTP-клиент для внешних API, когда нужен полный контроль

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

Перед внедрением смотрите на три вещи: кто владеет пакетом, как он ведёт себя с обновлениями Laravel/Symfony, и можно ли легко заменить его без переписывания половины домена.

Выигрывают не те, кто набрал больше зависимостей, а те, кто оставил в проекте только те пакеты, которые реально снимают рутину.
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
В роликах Youtube теперь можно рекламировать товары Amazone

➡️ Читайте на сайте: https://aff.top/blog/v-rolikakh-youtube-teper-mozhno-reklamirovat-tovary-amazone

🧠 Ещё больше инсайтов → в канале AFF.top
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
Google выпустил Gemini Omni 1.1 Flash

Google обновил Gemini Omni для генерации видео: модель умеет продолжать сцены с учётом до 10 секунд контекста и собирать ролик до 40 секунд, работать по референсу и делать переходы между кадрами. Главный вывод — инструмент стал практичнее для продакшена, а посекундная цена делает его заметно доступнее для тестов и рабочих задач.

➡️ Читайте на сайте: https://aff.top/blog/google-vypustil-gemini-omni-1-1-flash

🧠 Ещё больше инсайтов → в канале AFF.top
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
Топ 5 PWA-сервисов для залива дейтинга

Статья показывает, что PWA выгодны не только для гемблы: в дейтинге они дают пуш-базу, больше траста и помогают маскировать оффер под бренд. Главный выбор зависит от цены инсталлов и теста GEO: для старта лучше бесплатные или дешёвые решения, а Progressier выделяется как самый практичный вариант для залива дейтинга.

➡️ Читайте на сайте: https://aff.top/blog/top-5-pwa-servisov-dlia-zaliva-deitinga

🧠 Ещё больше инсайтов → в канале AFF.top
7 привычек Laravel-проекта, которые экономят часы на каждом релизе

В Laravel проблемы обычно не в фреймворке, а в дисциплине вокруг него. Если проект растёт, проверьте базовые вещи:

— держите бизнес-логику вне контроллеров: контроллер должен собирать вход и отдавать ответ, не решать всё сам;
— выносите повторяющиеся запросы в scopes, actions или сервисы, иначе Eloquent быстро превращается в копипасту;
— не прячьте побочные эффекты в observers без необходимости: отладка таких цепочек потом больнее, чем кажется.

Ещё одна частая ошибка — смешивать валидацию, авторизацию и сохранение в одном методе. Лучше разнести это по FormRequest, policies и отдельным классам, чтобы поведение было читаемым и тестируемым.

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

Если проект начал «течь» по мелочам, первым делом режьте связность, а не добавляйте ещё один слой абстракции.
🔥 Новый участник НеТОПа на AffPapa!
https://affpapa.org/netop

🏆 НеТОП на AffPapa — https://affpapa.org/netop/go/27?src=broadcast
Платный рейтинг индустрии: плати больше — стоишь выше. Займи место в топе за USDT.
💰 Ставка: $100 · сейчас #1 в рейтинге
🔥 justbrand_create — новый участник рейтинга НеТОП на AffPapa!

🏆 Своё место в топе честно купил justbrand_create: https://affpapa.org/netop/go/28?src=broadcast

💰 Ставка: $111 · сейчас #1 в рейтинге

Весь рейтинг → https://affpapa.org/netop
Composer ломается не там, где пакет плохой, а где у проекта нет правил

В большинстве PHP-проектов Composer используют как «установщик зависимостей», хотя он ещё и контракт на сборку. Если не зафиксировать его на старте, потом ловите сюрпризы: у одного разработчика всё поднимается, у другого падает автозагрузка, у третьего внезапно уезжает транзитивная зависимость.

Проверяйте базу:
— lock-файл должен коммититься, иначе вы не собираете тот же набор пакетов;
— версии в composer.json лучше ограничивать осмысленно, а не маской «на всё подряд»;
— автoload надо держать чистым: лишние namespace и дубли имен ломают предсказуемость;
— scripts и plugins стоит ревьюить так же, как обычный PHP-код.

Есть наблюдение которое стоит проверить: большинство «проблем Composer» на деле начинаются с мусора в vendor и неявных обновлений. Помогает простое правило — не править vendor руками, обновлять зависимости отдельной командой, а потом прогонять тесты и проверку автозагрузки. Если проект большой, полезно ещё разделить prod и dev-зависимости без самодеятельности в deployment-скриптах.

Когда Composer настроен как дисциплина, а не как магия, сборка становится повторяемой, а инцидентов на деплое заметно меньше.
Spatie в Laravel: 5 пакетов, которые закрывают типовые боли без самописки

У Spatie есть один полезный паттерн: они не «делают магию», а аккуратно закрывают повторяющиеся задачи. Поэтому их пакеты удобно брать в коммерческий проект, где важны предсказуемость и нормальная поддержка кода.

Чаще всего в бою нужны:
laravel-permission для ролей и прав без ручных таблиц и проверок по всему коду
laravel-medialibrary для файлов, превью и коллекций медиа
laravel-query-builder, когда фильтры, сортировки и include уже пора стандартизировать
laravel-data, чтобы не тащить DTO вручную по каждому слою

Есть наблюдение которое стоит проверить: Spatie особенно полезны там, где проект растёт быстрее, чем команда успевает «дописывать архитектуру». Пакет берёт на себя повторяемую механику, а вам остаются доменные правила. Это снижает шанс, что права, загрузка файлов и фильтры расползутся по контроллерам и сервисам.

Но есть и правило гигиены: не ставьте пакет «на всякий случай». Сначала проверьте, есть ли у него узкая ответственность, понятный API и место в вашем домене. Если пакет требует больше обходных решений, чем экономит времени, лучше оставить свою реализацию.

Если Spatie закрывает повторяющуюся боль и не ломает модель проекта, это почти всегда хороший кандидат на прод.