Currently seeking new career opportunities in web development, particularly with Laravel, Hire Me

How to disable Laravel console commands

David Carr

Laravel Framework

Suppose you find yourself in a situation where you need to disable or intercept a console command in Laravel. This tutorial will primarily focus on how to intercept the php artisan migrate command. We'll delve into the command method app/Console/Kernel.php and explore how to prevent the migrate command from executing any actions.

Inside the command method of app/Console/Kernel.php

In Laravel 11 use routes/console.php

Intercept command

You can intercept php artisan migrate and, instead, catch it and use a closure.

Artisan::command('migrate', function () {
    //
});

This would essentially stop the migrate command from doing anything.

You could then print a message out:

Artisan::command('migrate', function () {
    $this->info('Command NOT AVAILABLE. Use this: php artisan app:migrate');
});

Running an alternative command:

To run a different command:

Artisan::command('migrate', function () {
    $this->call('app:migrate');
});

In this case, a new command called app:migrate would be executed.

Run command with a --path option:

Artisan::command('migrate', function () {
    $this->call('app:migrate', [
        '--path' => 'database/migrations'
    ]);
});

Now when running php artisan migrate you will get an error:

The "--path" option does not exist.

The reason for this is the custom command does not have a path option. Lets create the command and add the option.

Create a command:

php artisan make:command AppMigrate

This creates a class called AppMigrate.php inside app/Console/Commands

Change the signature to be app:migrate

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class AppMigrate extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:migrate';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        //
    }
}

Now for this command to accept a path change the signature to accept a path.

protected $signature = 'app:migrate {--path= : The path to the migrations}';

Then inside the handle method collect the path.

public function handle()
{
    $path = $this->option('path') ?? 'database/other-path/migrations';

    //rest of the logic ...
}
Laravel Modules Your Logo Your Logo Your Logo

Become a sponsor

Help support the blog so that I can continue creating new content!

Sponsor

My Latest Book

Modular Laravel Book - Laravel: The Modular way

Learn how to build modular applications with Laravel Find out more

Subscribe to my newsletter

Subscribe and get my books and product announcements.

Learn Laravel with Laracasts

Faster Laravel Hosting

© 2006 - 2024 DC Blog. All code MIT license. All rights reserved.