Метод confirm
Метод confirm класса Command применяется в консольных командах Laravel для интерактивного взаимодействия с пользователем. Этот метод выводит вопрос в терминал и ожидает ввода от пользователя. Если пользователь вводит 'y' (или 'yes'), метод возвращает true, если вводит 'n' (или 'no') - возвращает false. Первым параметром передаётся текст вопроса, вторым - значение по умолчанию true или false.
Синтаксис
<?php
$this->confirm($question, $default = false);
?>
Пример
Давайте создадим консольную команду, которая спрашивает пользователя, хочет ли он выполнить действие:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class UserActionCommand extends Command
{
protected $signature = 'user:action';
protected $description = 'Request user confirmation for action';
public function handle()
{
$res = $this->confirm('Do you want to proceed?');
if ($res) {
$this->info('Action confirmed!');
} else {
$this->info('Action cancelled.');
}
}
}
?>
Результат выполнения команды при вводе y:
"Do you want to proceed? (yes/no) [no]: y"
"Action confirmed!"
Результат выполнения команды при вводе n:
"Do you want to proceed? (yes/no) [no]: n"
"Action cancelled."
Пример
Вторым параметром можно задать значение по умолчанию. Если установить true, то пользователю будет предложено 'yes' по умолчанию. В этом случае при нажатии Enter без ввода ответ будет true:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class DeleteDataCommand extends Command
{
protected $signature = 'data:delete';
protected $description = 'Delete all data';
public function handle()
{
$res = $this->confirm('Are you sure you want to delete all data?', true);
if ($res) {
$this->info('Data deleted successfully.');
} else {
$this->warn('Operation cancelled.');
}
}
}
?>
Результат выполнения команды без ввода:
"Are you sure you want to delete all data? (yes/no) [yes]: "
"Data deleted successfully."
Пример
Метод confirm часто используется вместе с методом ask для создания более сложных сценариев взаимодействия с пользователем:
<?php
namespace AppConsoleCommands;
use AppModelsUser;
use IlluminateConsoleCommand;
class CreateUserCommand extends Command
{
protected $signature = 'user:create';
protected $description = 'Create a new user';
public function handle()
{
$name = $this->ask('Enter user name');
$email = $this->ask('Enter user email');
$res = $this->confirm('Do you want to create user "' . $name . '" with email "' . $email . '"?');
if ($res) {
$user = new User();
$user->name = $name;
$user->email = $email;
$user->save();
$this->info('User created successfully!');
} else {
$this->warn('User creation cancelled.');
}
}
}
?>
Результат выполнения команды:
"Enter user name: John"
"Enter user email: john@example.com"
"Do you want to create user 'John' with email 'john@example.com'? (yes/no) [no]: y"
"User created successfully!"