Ir al contenido
getnextpdf.com

Enterprise edición

PHPStan

NextPDF Enterprise incluye una regla personalizada de PHPStan, EditionBoundaryRule, que señala las importaciones use que cruzan la frontera de edición Core → Pro → Enterprise. Es una comprobación estática orientada al desarrollador que notifica violaciones; analiza las sentencias de importación y no garantiza la corrección del código.

Esta capacidad se incluye en NextPDF Enterprise (nextpdf/enterprise) y se activa con un sobre de licencia de nivel Enterprise. Es una regla de PHPStan en tiempo de compilación, registrada a través de la configuración de PHPStan, por lo que se ejecuta durante el análisis estático y no tiene ruta en tiempo de ejecución; la puerta de licencia es la frontera del paquete nextpdf/enterprise, sin ningún código de capacidad por característica independiente. Comparar ediciones y obtener una licencia.

Ventana de terminal
composer require nextpdf/enterprise:^3

Registrar la regla en la configuración de PHPStan:

rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule

La regla inspecciona cada sentencia use y compara el espacio de nombres importador con el prefijo de espacio de nombres del símbolo importado. Impone un orden de dependencia unidireccional:

  • El código de Core (NextPDF\, excluyendo los subespacios de nombres de Pro y Enterprise) no debe importar de NextPDF\Pro\* ni de NextPDF\Enterprise\*.
  • El código de Pro (NextPDF\Pro\*) no debe importar de NextPDF\Enterprise\*.
  • El código de Enterprise (NextPDF\Enterprise\*) es el nivel superior y puede importar de cualquiera de ellos.

Cuando una importación cruza la frontera, la regla notifica un error con el identificador nextpdf.editionBoundaryViolation y un mensaje que nombra el espacio de nombres importador, el prefijo prohibido y etiquetas de edición legibles por humanos. La comprobación es puramente estática: lee el grafo de importación en tiempo de análisis.

La regla razona sobre las sentencias use en tiempo de análisis, no en tiempo de ejecución, porque la frontera de edición es un invariante arquitectónico y no una decisión en tiempo de ejecución. Core, Pro y Enterprise se distribuyen como paquetes separados, de modo que un nivel inferior nunca debe depender de símbolos ausentes de una instalación más pequeña. Detectar una importación que cruza la frontera durante el análisis estático hace fallar la compilación antes de que el error se distribuya. La alternativa es peor: la misma importación aflora más tarde como un error fatal de clase ausente en un despliegue solo con Core. El orden es deliberadamente unidireccional, Core → Pro → Enterprise, reflejando cómo los paquetes de núcleo abierto se apilan unos sobre otros. Enterprise queda sin restricciones porque es el nivel superior y puede referenciar todas las ediciones inferiores.

Contexto de diseño: Núcleo abierto, sin dependencia forzada.

ClaseResponsabilidad
EditionBoundaryRuleRegla de PHPStan sobre las sentencias use; notifica las violaciones de la frontera de edición.

La regla implementa el contrato estándar Rule de PHPStan sobre el tipo de nodo Use_ y emite errores bajo el identificador nextpdf.editionBoundaryViolation.

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

Una violación aparece en la salida de PHPStan, por ejemplo, así: una importación de Enterprise dentro de código de Core se notifica como una violación de la frontera de edición en la línea use infractora, bajo nextpdf.editionBoundaryViolation.

  • La regla razona sobre el espacio de nombres del archivo analizado y el prefijo del símbolo importado. El código en un espacio de nombres que no sea NextPDF\ no está restringido por esta regla.
  • Los espacios de nombres de Enterprise no tienen restricciones por diseño; la regla nunca señala un archivo de Enterprise por importar de Pro o de Core.
  • La regla analiza las sentencias use. Una referencia de clase totalmente cualificada escrita en línea sin un use queda fuera del alcance de esta regla; conviene preferir las importaciones para que la frontera se imponga.
  • La comprobación es estática y de carácter consultivo: notifica las violaciones de la frontera. No demuestra que el programa sea correcto por lo demás.

La regla se ejecuta por cada sentencia use durante el análisis de PHPStan y realiza comparaciones de prefijo de cadena. Su sobrecarga es proporcional al número de sentencias de importación y es insignificante en relación con el tiempo total de análisis.

Es una regla de análisis estático. Se ejecuta en tiempo de compilación dentro de PHPStan, lee únicamente la estructura del código fuente y no tiene ningún efecto en tiempo de ejecución sobre los PDF generados.

La regla procesa el código fuente en tiempo de análisis y no maneja ningún dato de documento ni dato personal.

Telemetría segura y depuración de registros

Sección titulada «Telemetría segura y depuración de registros»

La salida de la regla son diagnósticos de PHPStan. Contiene espacios de nombres y nombres de símbolos del propio código; conviene tratar los registros de análisis con el mismo cuidado que el código fuente.

No se afirma ninguna conformidad con estándares. Es una regla de herramientas para desarrolladores que impone una restricción arquitectónica interna (las capas de edición) en las compilaciones posteriores.

No aplicable; la regla no realiza ninguna operación criptográfica y no tiene ruta en tiempo de ejecución.

No es un componente en tiempo de ejecución. El propósito de la regla es detectar un error arquitectónico —una importación que cruza la frontera de edición— antes de que se distribuya, haciendo fallar la etapa de análisis estático.

  • La regla inspecciona cada sentencia use e impone un orden de dependencia unidireccional: Core no debe importar de Pro ni de Enterprise; Pro no debe importar de Enterprise; Enterprise puede importar de cualquiera.
  • Una importación que cruza la frontera se notifica bajo el identificador nextpdf.editionBoundaryViolation con el espacio de nombres importador y el prefijo prohibido.
  • El código en un espacio de nombres que no sea NextPDF\ no está restringido por esta regla.
  • Una referencia de clase totalmente cualificada en línea sin un use queda fuera del alcance de esta regla; conviene preferir las importaciones para que la frontera se imponga.

Esta página documenta únicamente el comportamiento observable desde fuera y la superficie pública de API admitida. Las rutas internas de espacio de nombres, las clases auxiliares, las tablas de mecanismos, los nombres de archivo de runbook y los prefijos de ticket quedan fuera del alcance.

NextPDF Core no incluye una regla de PHPStan de frontera de edición. Un consumidor solo con Core que quiera imponer las capas de edición en su propia compilación debe escribir o conseguir una regla equivalente por sí mismo.

NextPDF Pro no incluye la regla de PHPStan de frontera de edición; forma parte únicamente del paquete nextpdf/enterprise. Un despliegue solo con Pro no tiene ningún componente de Enterprise desde el que registrar esta regla. Consultar la descripción general de Enterprise para conocer la superficie de Enterprise.

El detalle del mecanismo interno permanece en la documentación interna del repositorio de código fuente y queda fuera del alcance de este manual.

Es una regla de análisis estático en tiempo de compilación. Se ejecuta dentro de PHPStan durante el análisis, lee únicamente la estructura del código fuente y no tiene ningún efecto en tiempo de ejecución sobre los PDF generados ni sobre ningún servicio desplegado. Registrarla y elegir el nivel de PHPStan son responsabilidad del integrador.

Esta página describe una regla de análisis estático de herramientas para desarrolladores. No ofrece ninguna garantía de cumplimiento, certificación ni corrección sobre el código; solo notifica las violaciones de importación de la frontera de edición y es de carácter consultivo. No constituye asesoramiento legal. Juzgar si la compilación cumple sus propias obligaciones arquitectónicas o contractuales es responsabilidad del integrador.