Команда make:command
Команда make:command создаёт новый класс консольной команды в директории app/Console/Commands. Созданный класс расширяет базовый класс Command и позволяет определить логику выполнения команды. Обязательным параметром передаётся имя класса, которое также будет служить именем команды в Artisan. После создания файла необходимо определить свойства signature и description, а также реализовать метод handle, который содержит основную логику работы.
Синтаксис
php artisan make:command ИмяКоманды
Дополнительные опции:
# Создание команды в поддиректории
php artisan make:command ИмяКоманды --path=путь/к/директории
# Принудительная перезапись существующего файла
php artisan make:command ИмяКоманды --force
Пример
Создадим простую команду для вывода приветствия пользователя:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SayHello extends Command
{
protected $signature = 'say:hello {name : Имя пользователя}';
protected $description = 'Выводит приветствие для указанного пользователя';
public function handle(): int
{
$name = $this->argument('name');
$this->info("Hello, {$name}!");
return Command::SUCCESS;
}
}
?>
Результат выполнения команды:
"Hello, John!"
Пример
Создадим команду с опциями и аргументами для отправки уведомлений:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\User;
class SendNotification extends Command
{
protected $signature = 'notify:send
{user : ID пользователя}
{--message= : Текст сообщения}
{--urgent : Срочное уведомление}';
protected $description = 'Отправляет уведомление указанному пользователю';
public function handle(): int
{
$userId = $this->argument('user');
$message = $this->option('message') ?? 'Default message';
$isUrgent = $this->option('urgent');
$user = User::find($userId);
if (!$user) {
$this->error("User with ID {$userId} not found.");
return Command::FAILURE;
}
if ($isUrgent) {
$message = "[URGENT] " . $message;
}
$this->info("Notification sent to {$user->name}: {$message}");
return Command::SUCCESS;
}
}
?>
Результат выполнения команды:
"Notification sent to John: [URGENT] Important message"
Пример
Создадим команду для очистки старых записей из базы данных с использованием интерактивного подтверждения:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Log;
use Carbon\Carbon;
class CleanOldRecords extends Command
{
protected $signature = 'clean:records {days=30 : Количество дней для хранения}';
protected $description = 'Удаляет записи старше указанного количества дней';
public function handle(): int
{
$days = (int) $this->argument('days');
$date = Carbon::now()->subDays($days);
$count = Log::where('created_at', '<', $date)->count();
if ($count === 0) {
$this->info('No records to clean.');
return Command::SUCCESS;
}
if ($this->confirm("Delete {$count} records older than {$days} days?")) {
Log::where('created_at', '<', $date)->delete();
$this->info("Deleted {$count} records.");
} else {
$this->info('Operation cancelled.');
}
return Command::SUCCESS;
}
}
?>
Результат выполнения команды:
"Deleted 150 records."
Смотрите также
-
команда
make:controller,
которая создаёт новый контроллер -
команда
make:model,
которая создаёт новую модель Eloquent -
команда
make:job,
которая создаёт новый класс задания для очереди -
класс
Command,
базовый класс для всех пользовательских команд Artisan