Extending Laravel’s "about" Command

Last year, I contributed a new about command to the Laravel framework. This command prints out information about your application:

$ php artisan about

Environment .........................................................  
Application Name .............................................. Forge  
Laravel Version .............................................. 9.51.0  
PHP Version ................................................... 8.2.1  
Composer Version .............................................. 2.5.1  
Environment ................................................... local  
Debug Mode .................................................. ENABLED  
URL ...................................................... forge.test  
Maintenance Mode ................................................ OFF  

Cache ...............................................................  
Config ................................................... NOT CACHED  
Events ................................................... NOT CACHED  
Routes ................................................... NOT CACHED  
Views ........................................................ CACHED  

Drivers .............................................................  
Broadcasting ................................................. pusher  
Cache .......................................................... file  
Database ...................................................... mysql  
Logs .......................................................... daily  
Mail ........................................................... smtp  
Queue ......................................................... redis  
Session .................................................... database  

Extra things you can do with this command

Using the --only option, you may specify a comma-separated list of sections to display:

$ php artisan about --only=cache,drivers

Cache ...............................................................  
Config ................................................... NOT CACHED  
Events ................................................... NOT CACHED  
Routes ................................................... NOT CACHED  
Views ........................................................ CACHED  

Drivers .............................................................  
Broadcasting ................................................. pusher  
Cache .......................................................... file  
Database ...................................................... mysql  
Logs .......................................................... daily  
Mail ........................................................... smtp  
Queue ......................................................... redis  
Session .................................................... database 

Of course, you can also get the information in JSON format using the --json option:

$ php artisan about --json

{"environment":{"application_name":"Forge","laravel_version":"9.51.0","php_version":"8.2.1","composer_version":"2.5.1","environment":"local","debug_mode":"ENABLED","url":"forge.test","maintenance_mode":"OFF"},"cache":{"config":"NOT CACHED","events":"NOT CACHED","routes":"NOT CACHED","views":"CACHED"},"drivers":{"broadcasting":"pusher","cache":"file","database":"mysql","logs":"daily","mail":"smtp","queue":"redis","session":"database"}}

Appending your own information

What you may not know is that you can also add your own application or package information into the command’s output. For package developers, this allows you to share additional information such as drivers, versions etc. and for application developers, this allows you to add application-specific information.

To share information with the about command, you need to update your service provider’s boot method:

use Illuminate\Foundation\Console\AboutCommand;
 
/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    AboutCommand::add('My Package', fn () => ['Version' => '1.0.0']);
}

Yes, that’s all it takes.

Firstly, we pass through the "section" name. This is how the command will separate the output and of course, we can add to the default sections by passing the same names.

$ php artisan about --only=my_package

My Package ..........................................................  
Version ....................................................... 1.0.0

Notice how we can also specify my_package in the --only option?

Next, we're passing a callable that returns an array of key/value pairs for information add. Alternatively, we can pass an array of data, However, when passing a callable, Laravel will only evaluate the information when it executes the about command. This is a performance optimisation to prevent applications from always loading the information, even when it’s not needed.

Some packages are already extending the about command: