用于验证数组的自定义验证规则

时间:2018-04-08 11:57:03

标签: php laravel

如果用户在表格中选择了他想要2张票类型的票据"票证类型1"和#34; 2号机票和#34; RegistrationController$request

中收到此消息
array:2 [▼
    "_token" => ""
    "types" => array:2 [▼
        "ticket type 1" => "2"
        "ticket type 2" => "1"
    ]
]

但我希望有一个规则" StoreTicketTypeQuantity"验证以下上下文

每个故障单类型在数据库中都有一列minPerUser和一个maxPerUser列。

例如,TicketType表具有名称为#34的故障单类型;故障单类型1"将minPerUser值设为" 1"并且maxPerUser值为" 4"。因此,在选择菜单中,用户只能为票证类型选择1到4之间的值"票证类型1"。

但是,用户可以在源代码中引入数量为" 100"对于故障单类型"故障单类型1",这应该导致验证错误。

的疑问:

您知道如何在StoreTicketTypeQuantity规则文件中获取数组的动态值来验证它吗?

TicketType型号:

class TicketType extends Model
{
    protected $fillable = [
        'name', 'price', 'minPerUser', 'maxPerUser','congress_id'
    ];
    public function congress(){
        return $this->belongsTo('App\Congress');
    }
}

规则文件:

class TicketTypeQuantity implements Rule
{
    public function __construct()
    {
    }
    public function passes($attribute, $value)
    {

    }
    public function message()
    {
        return 'The validation error message.';
    }
}

2 个答案:

答案 0 :(得分:3)

$rules = array('someVar'=>'required|numericarray')

使用它:

QDataStream &operator<<(QDataStream &out, PbxCfgHeader &info)
{
    out.writeRawData((char*)&info, sizeof(info));
    return out;
}

答案 1 :(得分:1)

在TicketTypeQuantity类中尝试此自定义验证:

public function passes($attribute, $value)
{
    foreach($value as $key=>$v){
        $ticket = TicketType::where('name',$key)->first();
        if ( $v < $ticket->minPerUser || $v > $ticket->maxPerUser)
               return false;
    }
    return true;
}

现在在验证中

$request->validate([
    'types' => ['required', 'array', new TicketTypeQuantity ],
]);