如何对 laravel 5.5 中的计算字段进行验证
How to make a validation on a calculated field in laravel 5.5
我想知道如何验证输入字段的计算值。
例如,我有一个名为 birthDate
的字段,我只想接受 birthDate
计算出的年龄小于 16 岁的日期。
我想在自定义中进行验证 Request
class
谢谢。
Validator::extend('youngerThan', function($attribute, $value, $parameters)
{
$maxAge = ( ! empty($parameters)) ? (int) $parameters[0] : 16;
//return (new DateTime)->diff(new DateTime($value))->y <= $minAge;
// or the same using Carbon
$dob = new Carbon\Carbon($value);
return $dob->age >= $minAge;
});
这样您就可以使用适合任何年龄段的规则:
$rules = ['dob' => 'youngerThan'];
$rules = ['dob' => 'youngerThan:15'];
我还通过创建 class Rule
找到了另一个解决方案,这在 Laravel 5.5
中可用
我建议的解决方案适用于年龄大于 1 岁的人
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class OlderThan implements Rule
{
protected $minAge=16;
/**
* 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,$parameters)
{
if( empty($parameters) )
{
$minAge = $parameters[0];
}
return $this->getAge($value) >= $minAge;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'L\'age doit être supérieur à'.$minAge;
}
private function getAge($value)
{
$dob = new Carbon\Carbon($value);
return $dob->age ;
}
}
我想知道如何验证输入字段的计算值。
例如,我有一个名为 birthDate
的字段,我只想接受 birthDate
计算出的年龄小于 16 岁的日期。
我想在自定义中进行验证 Request
class
谢谢。
Validator::extend('youngerThan', function($attribute, $value, $parameters)
{
$maxAge = ( ! empty($parameters)) ? (int) $parameters[0] : 16;
//return (new DateTime)->diff(new DateTime($value))->y <= $minAge;
// or the same using Carbon
$dob = new Carbon\Carbon($value);
return $dob->age >= $minAge;
});
这样您就可以使用适合任何年龄段的规则:
$rules = ['dob' => 'youngerThan'];
$rules = ['dob' => 'youngerThan:15'];
我还通过创建 class Rule
找到了另一个解决方案,这在 Laravel 5.5
我建议的解决方案适用于年龄大于 1 岁的人
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class OlderThan implements Rule
{
protected $minAge=16;
/**
* 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,$parameters)
{
if( empty($parameters) )
{
$minAge = $parameters[0];
}
return $this->getAge($value) >= $minAge;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'L\'age doit être supérieur à'.$minAge;
}
private function getAge($value)
{
$dob = new Carbon\Carbon($value);
return $dob->age ;
}
}