在控制台命令之后,我提示输入。我想验证用户输入。我该怎么做?
我检查了this plugin .但它看起来像是在验证参数和选项。不是交互式输入。
CreateClient.php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class CreateClient extends Command {
...
public function handle() {
$name = $this->ask('Enter name ');
$email = $this->ask('Enter email ');
$date = $this->ask('Enter date [Eg: 2016-01-01 00:00:00] ');
// Validate user input
$this->info('Validating user inputs');
// How to validate email & date format ?
}
}
更新
是的,我知道 Validator
,但担心的是验证会停止用户旅程。用户从头开始重新启动。是否可以为每个问题附加验证,以便立即验证并提示再次输入。
以下是我在未输入任何值时注意到的内容,我想知道如何提供更多验证规则。
提前致谢。
最佳答案
下面是另一种使用 Laravel 验证器的方法。
我的自定义方法 validate_cmd
有两个参数:
- 作为匿名函数的
命令
方法(询问、 secret 、选择...) - 一组规则
如果验证失败,将再次调用 Command
方法。
当然你会想把它放在一个特征中。
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Validator;
class CreateClient extends Command {
public function handle() {
$name = $this->validate_cmd(function() {
return $this->ask('Enter name');
}, ['name','required']);
$email = $this->validate_cmd(function() {
return $this->ask('Enter email');
}, ['email','required|email']);
$date = $this->validate_cmd(function() {
return $this->ask('Enter date [Eg: 2016-01-01 00:00:00]');
}, ['date','required']);
}
/**
* Validate an input.
*
* @param mixed $method
* @param array $rules
* @return string
*/
public function validate_cmd($method, $rules)
{
$value = $method();
$validate = $this->validateInput($rules, $value);
if ($validate !== true) {
$this->warn($validate);
$value = $this->validate_cmd($method, $rules);
}
return $value;
}
public function validateInput($rules, $value)
{
$validator = Validator::make([$rules[0] => $value], [ $rules[0] => $rules[1] ]);
if ($validator->fails()) {
$error = $validator->errors();
return $error->first($rules[0]);
}else{
return true;
}
}
}
关于laravel - 如何验证控制台命令提示符输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44426367/