jsiebach / commander
A Laravel Backpack-driven interface for executing artisan commands
Installs: 279
Dependents: 0
Suggesters: 0
Security: 0
Stars: 16
Watchers: 3
Forks: 1
Open Issues: 1
pkg:composer/jsiebach/commander
Requires
- php: >=7.0.0
- backpack/base: 1.0.*
- backpack/crud: 3.5.*
This package is not auto-updated.
Last update: 2025-10-26 10:36:54 UTC
README
Backpack Commander is a simple CRUD interface for running Artisan commands in Backpack for Laravel. The main benefit is to quickly allow non-developers to run Artisan commands without needing command line access, and to easily configure the arguments and options for the command line using Backpack field definitions.
Installation
- 
Install Backpack for Laravel 
- 
Install Backpack Commander 
composer require jsiebach/commander
- Publish the config file
php artisan vendor:publish --provider="JSiebach\Commander\CommanderServiceProvider" --tag="config"
- Publish the migration
php artisan vendor:publish --provider="JSiebach\Commander\CommanderServiceProvider" --tag="migrations"
- Review the config file to update configuration for your app. Available options are:
route: Edit the route for the commander interface.  Defaults to /admin/commander/command.
allow_creation_and_deletion: Determine whether new commands can be added or deleted.  It is recommended to keep this option false in a production environment and add new commands directly in the database.
- 
Run php artisan migrate
- 
Add your commands interface link to the sidebar (Optional) 
<li><a href="{{ backpack_url('commander')."/command" }}"><i class="fa fa-bullhorn"></i> <span>Commands</span></a></li>
Adding commands to Commander
You can now add new commands to your commander_commands table.  The fields are:
command: The artisan command (ie. inspire - whatever you would fill in for php artisan XXXXX)
descriptive_name: A name to show users for the command.  Will default to the artisan command name
The CRUD interface will also show a column with the description property of the command.
Defining commands
To define a command, add a function to the command called getCommanderFields(), which should return an array of Backpack field definitions.
- 
For simple commands like inspire, you can leave off thegetCommanderFields()function entirely.
- 
For commands that take arguments and options, you should return the Backpack field configuration in the getCommanderFields()function on the command. For example:
<?php
namespace App\Console\Commands;
use App\User;
use Illuminate\Console\Command;
use JSiebach\Commander\CommandableInterface;
class RunNewUsersReport extends Command implements CommandableInterface
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'reports:run-new-users-report {--startdate=} {--include-admins} {--delivery-email=}';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Run a report listing the newest users';
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // You can use the arguments of the artisan command as normal:
    	$this->comment('The email address to send the report to is '.$this->option('email'));
        $this->comment('The option \'include-admins\' is '.(((boolean) $this->option('include-admins')) ? "true" : "false"));
    	$this->comment('The start date for the report is '.$this->option('start-date'));
    }
	/**
	 * @return array
	 */
	public function getCommanderFields() {
		return [
			[
				'name' => '--startdate',
				'type' => 'date_picker',
				'label' => 'Start Date'
			],
			[
				'name' => '--include-admins',
				'type' => 'checkbox',
				'label' => 'Include Admin Users'
			],
			[
				'name' => '--delivery-email',
				'type' => 'select2_from_array',
				'options' => User::all()->pluck('name', 'email'),
				'label' => 'Report Recipient'
			]
		];
	}
}
Notes
- You cannot use relationship fields, since there is no model to be related to. Stick to simple field types that return strings, booleans, or arrays.
Running a command
In the commands CRUD interface, click the Run button to run a command.  You will see a form generated by the fields defined on the command.
Fill out the fields and click Run.  The output of the command will be printed in the resulting view.
Queueing a command
If you want to run a command on the queue, add the field --queue_command.  If you want this to be an option, you can use a check box.  If you want it to be automatic, use a hidden field with value 1.
You can specify the name of the queue with the --queue_name option.  Defaults to default
Future development plans
- Handle command errors
- Consider ways to generate the index view without having a table (ie. define $commandable = trueon commands that should be included)
Support
Please feel free to submit issues or pull requests on Github.
License
MIT