尊重验证可选输入数组的特定字段

时间:2019-04-05 14:01:49

标签: php respect-validation

我有一个注册输入,可以供消费者或车队消费者使用。根据他们是什么,取决于他们是否发送有关其机队的其他详细信息。普通消费者只会发送他们的信息,而车队消费者则会发送相同的信息,在子数组中还有2个额外字段。

输入数据为:

// POST data registration
// First example, fleet
{
  "firstName" : "Mike",
  "lastName" : "Dan",
  "email" : "email@email.com",
  "password" : "rawpassword",
  "fleet" : {
    "fleetCompanyName" : "My Company",
    "driverID" : "1234567890"
  }
}

// Second example, non fleet
{
  "firstName" : "Mike",
  "lastName" : "Dan",
  "email" : "email@email.com",
  "password" : "rawpassword",
}

如果需要设置车队输入,我需要对其进行验证(如果设置了两个字段,则两个字段都必须有效),但是如果未设置,则忽略车队字段。

    # Validation
$v = v::key('firstName', v::notEmpty())
    ->key('lastName', v::notEmpty())
    ->key('email', v::notEmpty())
    ->key('password', v::notEmpty())
    ->key('fleet', v::optional(v::arrayType(),[v::key('fleetCompanyName',v::charset('ASCII')),v::key('driverID', v::intVal())]),false);

这是我当前的迭代,它允许Fleet是可选的,但无法正确验证数组。

任何帮助将不胜感激。

干杯

菲尔

1 个答案:

答案 0 :(得分:0)

我无法在一个命令中执行此操作,因此找到了以下解决方案:

$v = v::key('firstName', v::notEmpty())
    ->key('lastName', v::notEmpty())
    ->key('email', v::notEmpty())
    ->key('password', v::notEmpty())
    ->key('fleet', v::optional(v::key('fleetCompanyName', v::charset('ASCII'))), false)
    ->key('fleet', v::optional(v::key('driverID', v::intVal())), false);

对于我需要的每个子数组值,我都需要像上面一样向链添加另一个命令。希望对其他人有帮助。