Skip to main content
Cuando un usuario te hace una consulta, conviene poder comprobar con un formato uniforme si el paquete está activado y qué driver está seleccionado. Con AboutCommand::add() puedes añadir una sección para tu paquete a la salida de php artisan about sin implementar un comando específico. La documentación oficial incluye un ejemplo básico de registro. Esta página revisa además la implementación de Laravel 13 y profundiza en el momento en que se recopila la información, los tipos en JSON, las colisiones de nombres de sección y el estado del registro en las pruebas.

Registrar el contenido mostrado en el provider

El siguiente ejemplo supone que courier.enabled y courier.driver ya están registrados como configuración del paquete. Para saber cómo registrar la configuración, consulta Fusión y caché de la configuración de paquetes.
runningInConsole() es una condición que evita registros innecesarios en las peticiones HTTP. No detecta únicamente la ejecución de about, por lo que el registro también se produce con otros comandos de Artisan. Sin embargo, las lecturas de configuración dentro de la closure anterior no se ejecutan en el momento del registro.
Elige de forma explícita los elementos que se muestran. No muestres claves de API, tokens de acceso, URLs de conexión que contengan credenciales ni arrays de configuración completos. La salida JSON tampoco enmascara automáticamente la información secreta. Cuando atiendas consultas, pide que se comparta solo la sección de tu paquete y que se revise su contenido antes de compartirla.

Separar el momento del registro del momento de la evaluación

En Laravel v13.35.0, add() no recopila los datos en ese instante, sino que añade una closure de registro al estático $customDataResolvers. Al ejecutar about, se construyen los datos que se van a mostrar y se evalúan las closures de obtención de datos registradas. Obtener los valores de configuración dentro de la closure refleja mejor el estado en el momento de ejecutar el comando que leerlos antes, fuera de add(), y fijarlos en un array. Por otro lado, el filtro --only se aplica después de evaluar las closures de obtención de datos.
Aunque indiques solo una sección estándar como en este caso, la closure de Acme Courier anterior se evalúa igualmente. Que algo no se muestre no significa que no se procese. Por eso, obtén la información adicional a partir de valores de configuración o de un estado local ligero. Si incluyes comprobaciones de conectividad con APIs externas, consultas a la base de datos o modificaciones de archivos, incluso los comandos que consultan secciones no relacionadas pueden volverse lentos o fallar. Separa las comprobaciones de conectividad y las reparaciones en comandos de Artisan específicos.
La condición runningInConsole() por sí sola no garantiza que se ejecute el boot() de un service provider diferido. Si quieres que la información de diagnóstico se registre siempre, coloca ese registro en un provider de carga inmediata. Para configuraciones en las que solo se difieren los bindings de servicios, consulta Service providers diferidos.

Compatibilizar la visualización en CLI con los tipos de JSON

Para consultar solo la información de tu paquete, indica el nombre de la sección convertido a snake case en minúsculas. En el caso de Acme Courier, es acme_courier.
Con el ejemplo de registro anterior, cuando courier.enabled es true y courier.driver es log, el JSON tiene esta forma:
En la CLI, Enabled se muestra como ENABLED. AboutCommand::format() es un helper que permite indicar console para la CLI y json para JSON. El ejemplo anterior solo indica console, por lo que JSON devuelve el valor booleano original. No es necesario reutilizar en JSON la cadena que se muestra en la CLI. Usar nombres formados por palabras corrientes en inglés separadas por espacios, como en el ejemplo, facilita el manejo de los filtros y de las claves JSON. Las claves que consultan los procesos automatizados pueden cambiar al modificar el nombre mostrado, así que comprueba la compatibilidad en cada versión.

Usar un nombre de sección propio del paquete

add() añade elementos a la misma sección. Indicar una sección con el mismo nombre no sustituye todo el contenido registrado anteriormente. Elige un nombre como Acme Courier que se distinga de otros paquetes, y limita las adiciones a las secciones estándar de Laravel Environment, Cache, Drivers y Storage a los casos en que sea necesario. Si registras varias veces un elemento con el mismo nombre en la misma sección, en la CLI pueden quedar varias líneas, pero en JSON se agrupan en la misma clave y se conserva el último valor. Evita también nombres que, aunque se escriban de forma distinta, den lugar a la misma clave tras la conversión a snake case. Concentra el registro en un único lugar y diseña los elementos para que sean únicos tanto en la CLI como en JSON.

Gestionar el estado estático del registro en las pruebas

Al iniciar la ejecución de about se reinicia $data, que contiene los datos que se muestran, pero se conserva $customDataResolvers, la lista de registros de información adicional. Esto permite volver a recopilar la información a partir de los mismos registros en cada ejecución, pero si el boot() de un provider se ejecuta repetidamente en el mismo proceso PHP, los registros pueden acumularse. AboutCommand::flushState() es un método que elimina los registros de todos los paquetes y los datos que se muestran. No lo llames en un provider de producción para evitar duplicar tu propia sección. Se perdería también la información de diagnóstico de otros paquetes. Si reconstruyes la aplicación con tu propia infraestructura de pruebas, decide quién es responsable de reiniciar el estado entre pruebas. Si lo reinicias, hazlo antes de arrancar los providers afectados y realiza después todos los registros necesarios. Comprueba también si tu infraestructura de pruebas existente ya reinicia el estado.

Puntos de verificación antes de publicar

Comprueba las siguientes combinaciones con Probar paquetes Laravel con Orchestra Testbench y en una aplicación real que use tu paquete.

Páginas relacionadas

Desarrollo de paquetes para Laravel

Repasa los fundamentos de los providers y del registro de recursos.

Fusión y caché de la configuración de paquetes

Repasa la relación entre los valores por defecto, las sobrescrituras del usuario y la caché de configuración.

Fuentes primarias consultadas

Última modificación el 11 de octubre de 2026