Prevent Destructive Commands From Running in Laravel

As of Laravel 11.9 you can now prevent commands like database migrations from accidentally running in production environments with a Prohibitable trait:

use Illuminate\Console\Command;
use Illuminate\Console\Prohibitable;

class SomeDestructiveCommand extends Command
{
    use Prohibitable;
}

// SomeDestructiveCommand::prohibit($this->app->isProduction());

The Laravel framework includes some database commands that include the Prohibitable trait, such as db:wipe, migrate:fresh, migrate:refresh, and migrate:reset:

public function boot(): void
{
    FreshCommand::prohibit();
    RefreshCommand::prohibit();
    ResetCommand::prohibit();
    WipeCommand::prohibit();
}

Using the DB Facade, you can prohibit destructive database commands built into Laravel:

// Prohibits: db:wipe, migrate:fresh, migrate:refresh, and migrate:reset
DB::prohibitDestructiveCommands($this->app->isProduction());

The prohibit() method accepts a Boolean argument that defaults to true, and you can conditionally prevent commands from running using whatever logic you need, so that you can still run them in development environments:

public function boot(): void
{
    YourCommand::prohibit($this->app->isProduction());
}

The post Prevent Destructive Commands From Running in Laravel appeared first on Laravel News.

Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.

Read more

© 2024 Extly, CB - All rights reserved.