Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас
Signal
Новини 27 червня 2026
1

Signal - бібліотека для генерації документації з PHP-атрибутів

Signal - це PHP-бібліотека від Стіва Макдугала, яка зчитує атрибути, розміщені на класах і методах, і генерує з них документацію. Ідея полягає в тому, щоб тримати API-довідку в тому самому місці, де знаходиться код, який вона описує. Так документація змінюється разом із кодом замість того, щоб застарівати в окремому файлі. Бібліотека вимагає PHP 8.5 та Symfony Console і розповсюджується під ліцензією MIT.

Бібліотека постачається з 24 атрибутами, розділеними на три групи: атрибути, що позначають тип класу, атрибути, які фіксують зв'язки та статус класу, та атрибути для документування окремих методів. Ви анотуєте свій код, запускаєте одну команду й отримуєте Markdown для людей та JSON для інструментів.

Позначення типу класу

Перша група атрибутів описує роль, яку клас виконує у вашому застосунку. Їх 13, і вони охоплюють поширені будівельні блоки: #[Module], #[Service], #[Repository], #[Action], #[Controller], #[Event], #[Listener], #[Middleware], #[Job], #[Command], #[Query], #[Aggregate] та #[ValueObject]. Кожен приймає необов'язковий опис і список тегів:

use JustSteveKing\Signal\Attributes\Service;

#[Service(
    description: 'Issues and revokes API tokens for authenticated users',
    tags: ['auth', 'tokens'],
)]
final class TokenService
{
    // ...
}

Коли Signal генерує вихідні дані, він групує класи за цими типами, тому всі контролери потрапляють в один розділ, а всі сервіси - в інший.

Фіксація зв'язків і статусу

Друга група документує, як клас пов'язаний з рештою системи і на якому етапі життєвого циклу він знаходиться. #[DependsOn] фіксує співробітника (collaborator), #[ListensTo] прив'язує слухача до події, а #[Deprecated] і #[Internal] позначають класи, до яких викликачі повинні ставитись обережно:

use JustSteveKing\Signal\Attributes\Listener;
use JustSteveKing\Signal\Attributes\ListensTo;
use JustSteveKing\Signal\Attributes\DependsOn;

#[Listener(description: 'Sends a welcome email after registration')]
#[ListensTo(event: UserRegistered::class)]
#[DependsOn(class: MailService::class)]
final class SendWelcomeEmail
{
    // ...
}

Ці зв'язки - той тип деталей, який зазвичай зберігається в чиїйсь голові або на діаграмі, яку ніхто не оновлює. Розміщення їх поруч із класом робить їх достовірними.

Документування методів

Третя група описує, що роблять окремі методи. #[Route] фіксує HTTP-метод і шлях, #[Authorize] вказує на здатність (ability), яка потрібна викликачу, #[Validates] захоплює правила валідації поле за полем, а #[Cached] записує TTL. Ще три атрибути документують поведінку, яку сама сигнатура методу не розкриває: #[Emits] для подій, які метод відправляє, #[Throws] для винятків, які він може викинути, та #[SideEffect] для помітної роботи на кшталт відправки пошти або запису в чергу.

use JustSteveKing\Signal\Attributes\Route;
use JustSteveKing\Signal\Attributes\Authorize;
use JustSteveKing\Signal\Attributes\Validates;
use JustSteveKing\Signal\Attributes\Emits;
use JustSteveKing\Signal\Attributes\Throws;
use JustSteveKing\Signal\Attributes\SideEffect;

#[Route(method: 'POST', path: '/api/subscriptions', description: 'Start a subscription')]
#[Authorize(ability: 'subscriptions.create')]
#[Validates(field: 'plan', rules: 'required|in:monthly,yearly')]
#[Emits(event: 'SubscriptionStarted')]
#[SideEffect(description: 'Charges the customer through the payment gateway', tags: ['billing'])]
#[Throws(exception: PaymentFailedException::class, description: 'If the gateway rejects the charge')]
public function store(Request $request): JsonResponse
{
    // ...
}

Атрибути #[SideEffect] і #[Throws] варто виділити окремо, бо вони документують речі, які читач не може вивести з типу повернення. Знання про те, що метод списує кошти з картки або може викинути PaymentFailedException, - це той тип фактів, який інакше проявляється лише тоді, коли щось ламається.

Конфігурація та вихідні дані

Signal зчитує файл signal.json у корені вашого проекту. Він вказує генератору, яку директорію сканувати, які формати писати, куди їх розміщувати і які шляхи пропускати:

{
    "input": "src/",
    "output": {
        "format": ["markdown", "json"],
        "path": "docs/"
    },
    "exclude": [
        "src/Attributes/"
    ]
}

Маючи це налаштування, одна команда генерує документацію:

php vendor/bin/signal generate

Вихідний Markdown організовано за типом класу зі змістом, а JSON містить ті самі метадані у формі, яку можуть читати інші інструменти. Це робить його відправною точкою для таких речей, як генерація OpenAPI-опису або живлення внутрішнього каталогу сервісів.

Встановлення

Встановіть бібліотеку через Composer:

composer require juststeveking/signal

Ви можете ознайомитись із вихідним кодом і повним списком атрибутів на GitHub.

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Backpack CRUD RCE

Повідомлення про безпеку: неавтентифіковане ін'єктування команд у Backpack\CRUD

Команда Backpack for Laravel опублікувала повідомлення про безпеку: у телеметрії пакета Backpack\CRUD виявлено вразливість, що дозволяла віддалене виконання коду (RCE) без автентифікації. Дослідник безпеки Vishal Shukla (@therawdev) відповідально повідомив про проблему 16 травня 2026 року, і команда розробників випустила виправлення менш ніж за 24 години.

Що нового в PostgreSQL 19: графові запити, GROUP BY ALL і крок до "універсальної" бази даних

Що нового в PostgreSQL 19: графові запити, GROUP BY ALL і крок до "універсальної" бази даних

PostgreSQL 19 продовжує важливу тенденцію останніх років: класична реляційна база даних поступово перетворюється на універсальну платформу для роботи з різними типами даних - від JSON до графів і аналітики.

Вакансії за темою

Full-time Вчора

Backend Developer (PHP, Laravel), розробник систем цифрової логістики

Хартія, 13-та БрОП НГУ Віддалено ₴25,000 - ₴75,000

SENIOR FULL-STACK РОЗРОБНИК СИСТЕМ ЦИФРОВОЇ ЛОГІСТИКИ Ми шукаємо Backend Developer Для нас важливіше не те, чи ти працював саме з «ідеальним» набором технологій, а те, чи вмієш ти мислити як інженер, розбиратися в задачах, брати відповідальність за результат і рости разом. Стек можна опанувати,ми допоможемо з онбордингом, контекстом і підтримкою команди. Обов’язки розробляти та покращувати backend-частину продукту створювати інтеграції між сервісами працювати з даними, бізнес-логікою та внутрішніми процесами брати участь в обговоренні рішень разом із командою продукту, дизайну та інженерії покращувати стабільність, продуктивність і надійність сервісів занурюватися в домен і впливати на те, як продукт розвивається далі Вимоги маєш від 2 років комерційного досвіду в backend-розробці добре розумієш принципи веброзробки, роботу з базами даних, Git вмієш писати чистий, зрозумілий код і не боїшся рефакторингу можеш самостійно розібратися в задачі, поставити уточнювальні запитання й довести її до результату Буде плюсом досвід із сучасним backend-стеком (наприклад: Node.js / TypeScript, PHP / Laravel, Python, Go, Java тощо) досвід роботи з SQL/NoSQL, Docker, CI/CD, тестуванням розуміння, як будуються масштабовані та надійні системи Надсилайте свої резюме або телефонуйте на офіційний номер 3333 для призначення співбесіди.

Full-time Вчора

Senior PHP Engineer

airSlate Віддалено За результатами співбесіди

About airSlate airSlate is a global SaaS technology company that develops no-code workflow automation, electronic signature, and document management solutions. Our award-winning products - SignNow, pdfFiller, DocHub, altaFlow, Instapage, and US Legal Forms - serve over hundreds of millions of users and more than one million customers worldwide, helping organizations of every size digitize processes, improve efficiency, and transform how they work. We’re in an exciting phase of growth and transformation, with teammates in more than 20 countries across three continents and main hubs in the United States, Poland, Ukraine and Philippines. At airSlate, we’re building value for customers and a culture where growth and innovation go hand in hand. We’re looking for people eager to shape products, scale a company, and thrive in a fast-moving environment. About US Legal Forms team: We are a passionate and ambitious team on a mission to succeed with our largest online library of legal forms - US Legal Forms. Since 1997, US Legal Forms empowers attorneys, small businesses, and even individuals to get their legal documents done. With US Legal Forms, users have access to an online library of more than 85,000 legal templates, detailed guidelines, completion and online notary services. And now, we are looking for a PHP Backend Developer who is prepared to contribute to the next chapter of our company’s growth. What you’ll be working on: Design, build, and maintain backend features and APIs for US Legal Forms using PHP/Laravel Bring an AI-forward approach to daily work - find and implement ways AI can help the team build and ship faster and smarter Contribute cross-functionally when needed, including some React frontend work Analyse A/B test results and own the impact of your work on product outcomes Take part in technical and process decisions, helping the team operate independently with minimal PM involvement Write tested, maintainable code and help uphold quality standards Proactively raise ideas that make the team faster, smarter, and more impactful What we expect from you: 3+ years of backend development experience Strong PHP/Laravel proficiency Hands-on experience using AI tools to improve real development work Solid experience with REST APIs, SQL/MySQL, message queues (SQS), and cloud/AWS Good testing practices and a commitment to code quality Basic Python knowledge for some tasks Basic knowledge of React for cross-functional contributions Proactive and independent, with a clear sense of ownership; comfortable making decisions in a low-bureaucracy team English level B1+ What we offer Flexible working environment - Our teams operate across the globe. We value in‑person collaboration in our hubs, but we also embrace remote and hybrid working. You can work from one of our offices in the United States, Poland, Romania or Ukraine, or remotely from many countries. Competitive compensation and stock options - We offer salaries that reflect local market conditions and experience, plus a performance-based bonus system and stock options so you share in the company’s growth. Professional growth and learning - We invest in your development through courses, conferences, and access to learning resources. We encourage career growth and internal mobility, supporting teammates who want to explore new opportunities within airSlate. Health and well‑being - We provide comprehensive benefits tailored to each country, including health coverage, wellness programmes and access to fitness options. We also dedicate quarterly company-wide Mental Health Days, when everyone takes time off to rest and recharge. Family‑friendly culture - Family life is part of who we are, and we embrace it in many forms. From flexibility for parents to our airSlate Junior Club for kids, to company-wide family days and our pet-friendly approach, we’re committed to making work and life easier to balance. Giving back - We support charitable initiatives around the world through the airSlate Care programme. Our current focus includes humanitarian aid in Ukraine and other regions, matching employee donations and supporting causes chosen by our teams. Open communication - We encourage transparent dialogue at all levels. From team discussions to company-wide Q&A sessions with our CEO, we make sure everyone has the chance to be heard and to influence how we grow. Відгукнутись на вакансію

Full-time Вчора

Developer BackEnd PHP /

EpicentrK Віддалено до $3,100

Технології, які використовуються на проекті: BE: PHP, Rest API Stack: MySQL, RabbitMQ, Vertica, Redis Обов'язки: Розробка та доробка існуючих високонавантажених сервісів компанії Інтеграція з сторонніми системами Розробка та оптимізація SQL-запитів, зберігаємих процедур та функцій Розробка та оптимізація NoSQL-запитів Участь в плануванні архітектури сервісів, систем Супровід розробленого ПО та вирішення технічних проблем Технічний стек кандидата і основні вимоги: 4+ років роботи PHP Знання шаблонів проектування, SOLID, DDD Робота із legacy-кодом інших розробників та проектами архітектурі моноліт Rest API MySQL, Vertica Буде плюсом: Досвід розробки навантажених проектів у кластерізованому та вискокінтегрованому середовищі Рівень володіння англійською мовою: Бажано технічна у рамках фаху.