Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在laravel中添加时间规则_Php_Laravel_Validation_Rules - Fatal编程技术网

Php 如何在laravel中添加时间规则

Php 如何在laravel中添加时间规则,php,laravel,validation,rules,Php,Laravel,Validation,Rules,我想在laravel中添加一个基于时间类型字符串的规则。用户将发送歌曲的时间,如mm:ss有时它将为空,有时它将发送歌曲的时间2:50。我添加了以下代码,但无法添加时间规则 $data = request(['songTime']); $rules = [ 'songTime' => 'string|nullable|MM:SS' ]; $validator = Validator::make($da

我想在laravel中添加一个基于时间类型字符串的规则。用户将发送歌曲的时间,如mm:ss有时它将为空,有时它将发送歌曲的时间2:50。我添加了以下代码,但无法添加时间规则

    $data = request(['songTime']);
$rules = [            
            'songTime' => 'string|nullable|MM:SS'
        ];

        $validator = Validator::make($data, $rules);
        if ($validator->fails() ) {
            return response()->json([
                'message' => 'Invalid Request',
                'error' => $validator->messages()
            ], 400);
        }

我建议有两种方法,第一种是使用拉威尔法则

您需要稍微修改一下正则表达式,它可以接受一个或两个数字、冒号和数字的任何模式。所以2:99之类的东西会被错误地接受

另一种选择是写一个。这里的示例使用闭包,但我强烈建议将其提取到自己的类中

$rules = [
    'songTime' => [
        'string',
        'nullable',
        static function ($attribute, $value, $fail) {
            [$min, $sec] = explode(':', $value);

            if (ctype_digit($min) === false || ctype_digit($sec) === false || $sec > 59) {
                $fail($attribute . ' is invalid.');
            }
        },
    ],
];

使用诸如H:i:s或i:s之类的日期\格式规则验证,还可以使用表单验证请求,这将使您的代码缩小到控制器文件中

<?php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ValidateSongTimeRequest extends FormRequest {

 /**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize() {
    return true;
}

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules() {
    return [
         'songTime' => 'required|date_format:H:i:s'
    ];
}
}
<?php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ValidateSongTimeRequest extends FormRequest {

 /**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize() {
    return true;
}

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules() {
    return [
         'songTime' => 'required|date_format:H:i:s'
    ];
}
}
public function validateTime(ValidateSongTimeRequest $request) {
    $inputs = $request->all();
    try {
        
    } catch (Exception $exception) {
        Log::error($exception);
    }
 throw new Exception('Error occured'.$exception->getMessage());
}