如何对 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  ;
    }
}