laravel - 如何验证控制台命令提示符输入

标签 laravel validation command laravel-5.4

在控制台命令之后,我提示输入。我想验证用户输入。我该怎么做?

我检查了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,但担心的是验证会停止用户旅程。用户从头开始重新启动。是否可以为每个问题附加验证,以便立即验证并提示再次输入。

以下是我在未输入任何值时注意到的内容,我想知道如何提供更多验证规则。

enter image description here

提前致谢。

最佳答案

下面是另一种使用 Laravel 验证器的方法。

我的自定义方法 validate_cmd 有两个参数:

  1. 作为匿名函数的命令方法(询问、 secret 、选择...)
  2. 一组规则

如果验证失败,将再次调用 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/

相关文章:

php - 在 Laravel 5.2 中按 id 显示图像文件

php - Laravel Eloquent 问题获取数据库数据

javascript - 验证 gridview 中选中的项目

ruby-on-rails - Rails 验证阻止保存

ruby - 在Juniper OS上通过SSH的多个脚本命令

php - 通过 PHP 执行。我无法将输出(stderr)放入文件中

Laravel Eloquent 分页关系未显示在集合中

validation - 输入类型 ='number' 新验证删除了 Safari for iPhone iOS5 和最新的 Safari for Mac 中的前导零和格式数字

windows - 为什么我不能从命令提示符中删除 'INetCache' 文件夹的内容?

php - Laravel Lighthouse 配置 - 无法找到可发布的资源