Метод ask
Метод ask класса Command предназначен для организации интерактивного взаимодействия с пользователем в консольных приложениях Laravel. Первым параметром передаётся текст вопроса, вторым - значение по умолчанию (необязательно). Метод приостанавливает выполнение команды до тех пор, пока пользователь не введёт ответ и не нажмёт Enter. Возвращаемое значение - строка, введённая пользователем.
Синтаксис
<?php
$this->ask($question, $default = null);
?>
Метод принимает два параметра:
$question - текст вопроса, который будет отображён пользователю;
$default - значение, которое будет использовано, если пользователь просто нажмёт Enter (необязательный параметр).
Пример
Давайте создадим консольную команду, которая запрашивает у пользователя его имя:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class GreetCommand extends Command
{
protected $signature = 'greet';
protected $description = 'Greet the user';
public function handle()
{
$name = $this->ask('What is your name?');
$this->info("Hello, {$name}!");
}
}
?>
Результат выполнения команды:
"What is your name?"
"> John"
"Hello, John!"
В этом примере метод ask выводит вопрос "What is your name?" и ожидает ввода. После того как пользователь вводит имя и нажимает Enter, метод возвращает введённую строку, которая затем используется для вывода приветствия.
Пример
Используем второй параметр для установки значения по умолчанию:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
class NameCommand extends Command
{
protected $signature = 'name';
protected $description = 'Get user name';
public function handle()
{
$name = $this->ask('What is your name?', 'Guest');
$this->info("Hello, {$name}!");
}
}
?>
Результат выполнения команды:
"What is your name? [Guest]"
"> "
"Hello, Guest!"
Если пользователь нажимает Enter без ввода, используется значение по умолчанию "Guest". В квадратных скобках отображается подсказка с этим значением.
Пример
Метод ask часто используется для получения данных, необходимых для дальнейшей работы команды:
<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
use AppModelsUser;
use IlluminateSupportFacadesHash;
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');
$password = $this->secret('Enter password');
User::create([
'name' => $name,
'email' => $email,
'password' => Hash::make($password),
]);
$this->info('User created successfully!');
}
}
?>
Результат выполнения команды:
"Enter user name"
"> John Doe"
"Enter user email"
"> john@example.com"
"Enter password"
"> ******"
"User created successfully!"
Здесь метод ask используется для получения имени и email пользователя, а метод secret - для скрытого ввода пароля.