Перейти к содержимому
getnextpdf.com

Enterprise редакция

PHPStan

NextPDF Enterprise поставляет пользовательское правило PHPStan EditionBoundaryRule, которое выявляет импорты use, пересекающие границу редакций Core → Pro → Enterprise. Это статическая проверка для разработчиков, которая сообщает о нарушениях; она анализирует операторы импорта и не гарантирует корректности вашего кода.

Эта возможность поставляется в NextPDF Enterprise (nextpdf/enterprise) и активируется с лицензионным конвертом уровня Enterprise. Это правило PHPStan, работающее на этапе сборки и регистрируемое через вашу конфигурацию PHPStan, поэтому оно выполняется во время статического анализа и не имеет пути выполнения во время работы; лицензионный гейт — это граница пакета nextpdf/enterprise, без отдельного кода возможности для каждой функции. Сравните редакции и получите лицензию.

Окно терминала
composer require nextpdf/enterprise:^3

Зарегистрируйте правило в своей конфигурации PHPStan:

rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule

Правило проверяет каждый оператор use и сравнивает импортирующее пространство имён с префиксом пространства имён импортируемого символа. Оно обеспечивает однонаправленный порядок зависимостей:

  • Код Core (NextPDF\, исключая подпространства имён Pro и Enterprise) не должен импортировать из NextPDF\Pro\* или NextPDF\Enterprise\*.
  • Код Pro (NextPDF\Pro\*) не должен импортировать из NextPDF\Enterprise\*.
  • Код Enterprise (NextPDF\Enterprise\*) — это верхний уровень и может импортировать из любого из них.

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

Правило рассуждает об операторах use на этапе анализа, а не во время выполнения, потому что граница редакций — это архитектурный инвариант, а не решение времени выполнения. Core, Pro и Enterprise поставляются как отдельные пакеты, поэтому нижний уровень никогда не должен зависеть от символов, отсутствующих в меньшей установке. Обнаружение импорта, пересекающего границу, во время статического анализа заставляет сборку завершиться неудачно ещё до того, как ошибка попадёт в выпуск. Альтернатива хуже: тот же импорт позднее проявляется как фатальная ошибка отсутствующего класса в развёртывании только с Core. Порядок намеренно однонаправленный, Core → Pro → Enterprise, отражая то, как пакеты open-core наслаиваются друг на друга. Enterprise остаётся неограниченным, потому что это верхний уровень и он может ссылаться на любую нижестоящую редакцию.

Предыстория проектирования: Открытое ядро, без привязки к поставщику.

КлассНазначение
EditionBoundaryRuleПравило PHPStan над операторами use; сообщает о нарушениях границы редакций.

Правило реализует стандартный контракт PHPStan Rule над типом узла Use_ и выдаёт ошибки под идентификатором nextpdf.editionBoundaryViolation.

# phpstan.neon
includes:
- vendor/nextpdf/enterprise/phpstan.neon.dist
# phpstan.neon
rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule
parameters:
level: 9
paths:
- src

Нарушение появляется в выводе PHPStan, например так: импорт Enterprise внутри кода Core сообщается как нарушение границы редакций на нарушающей строке use под идентификатором nextpdf.editionBoundaryViolation.

  • Правило рассуждает о пространстве имён анализируемого файла и префиксе импортируемого символа. Код в пространстве имён, отличном от NextPDF\, этим правилом не ограничивается.
  • Пространства имён Enterprise по замыслу не ограничены; правило никогда не помечает файл Enterprise за импорт из Pro или Core.
  • Правило анализирует операторы use. Полностью квалифицированная ссылка на класс, написанная встроенно без use, находится вне области охвата этого правила; предпочитайте импорты, чтобы граница принуждалась.
  • Проверка статическая и рекомендательная: она сообщает о нарушениях границы. Она не доказывает, что ваша программа в остальном корректна.

Правило выполняется для каждого оператора use во время анализа PHPStan и выполняет сравнения строковых префиксов. Его накладные расходы пропорциональны числу операторов импорта и пренебрежимо малы относительно общего времени анализа.

Это правило статического анализа. Оно выполняется на этапе сборки внутри PHPStan, читает только структуру исходного кода и не влияет во время выполнения на формируемые PDF.

Правило обрабатывает исходный код на этапе анализа и не работает ни с какими данными документов или персональными данными.

Безопасная телеметрия и очистка журналов

Заголовок раздела «Безопасная телеметрия и очистка журналов»

Вывод правила — это диагностика PHPStan. Он содержит пространства имён и имена символов из вашего собственного кода; относитесь к журналам анализа с той же осторожностью, что и к исходному коду.

Соответствия каким-либо стандартам не заявляется. Это правило инструментария для разработчиков, которое обеспечивает внутреннее архитектурное ограничение (расслоение по редакциям) в нижестоящих сборках.

Неприменимо; правило не выполняет криптографических операций и не имеет пути выполнения во время работы.

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

  • Правило проверяет каждый оператор use и обеспечивает однонаправленный порядок зависимостей: Core не должен импортировать Pro или Enterprise; Pro не должен импортировать Enterprise; Enterprise может импортировать любого.
  • Импорт, пересекающий границу, сообщается под идентификатором nextpdf.editionBoundaryViolation с импортирующим пространством имён и запрещённым префиксом.
  • Код в пространстве имён, отличном от NextPDF\, этим правилом не ограничивается.
  • Полностью квалифицированная встроенная ссылка на класс без use находится вне области охвата этого правила; предпочитайте импорты, чтобы граница принуждалась.

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

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

NextPDF Pro не поставляет правило PHPStan для границы редакций; оно является частью только пакета nextpdf/enterprise. Развёртывание только с Pro не имеет компонента Enterprise, из которого можно было бы зарегистрировать это правило. См. Обзор Enterprise для поверхности Enterprise.

Внутренние детали механизма остаются во внутренней документации исходного репозитория и находятся вне области охвата этого руководства.

Это правило статического анализа на этапе сборки. Оно выполняется внутри PHPStan во время анализа, читает только структуру исходного кода и не влияет во время выполнения на формируемые PDF или на любую развёрнутую службу. Его регистрация и выбор уровня PHPStan — обязанность интегратора.

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