L5.6 - 在手术室中验证多个'rules'



我需要验证一个输入日期参数,称为starttime,可以以两种格式Y-m-dTH:i:sY-m-d传递。

现在,我的PHP代码只验证一个规则:

$validator = Validator::make($input_data, [
'starttime'     => 'date_format:"Y-m-dTH:i:s"',
]);

如何在OR中使用两个规则验证starttime

谢谢。

我使用规则对象找到了一个解决方案:

<?php
namespace AppRules;
use IlluminateContractsValidationRule;
use IlluminateSupportFacadesValidator;
class StartOrEndDateRule implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param  string  $attribute
* @param  mixed  $value
* @return bool
*/
public function passes($attribute, $value)
{
$return1 = true;
$return2 = true;
/* Check validation on 'YYYY-MM-DDTHH:ii:ss' */
$validator = Validator::make([$attribute => $value], [
$attribute      => 'date_format:"Y-m-dTH:i:s"',
]);
if ($validator->fails()) {
$return1 = false;
}
/* Check validation on 'YYYY-MM-DD' */
$validator = Validator::make([$attribute => $value], [
$attribute      => 'date_format:"Y-m-d"',
]);     
if ($validator->fails()) {
$return2 = false;
}
/* Check value to return */
if ( $return1 === false && $return2 === false ) {
return false;
} else {
return true;
}
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The ":attribute" does not match the format "Y-m-dTH:i:s" or "Y-m-d"';
}
}

在控制器中:

$validator = Validator::make($input_data, [
'starttime'     => [new StartOrEndDateRule],
]);

最新更新