Php 当必须设置多个输入项之一时,如何处理Zend Framework 2应用程序中的情况?
我目前正在开发的ZF2应用程序是Apigility驱动的,但我需要将一些Php 当必须设置多个输入项之一时,如何处理Zend Framework 2应用程序中的情况?,php,zend-framework2,required,zend-inputfilter,laminas-api-tools,Php,Zend Framework2,Required,Zend Inputfilter,Laminas Api Tools,我目前正在开发的ZF2应用程序是Apigility驱动的,但我需要将一些InputFilter设置从module.config.php移动到分离InputFilter文件/类 现在我有了CompanyId和UserId字段。必须设置其中一个(一个且仅一个)。我用回调验证器尝试了这一点,见下文。但它不起作用:如果两个字段都丢失,则不会执行验证 如何解决这个问题 class AddressPostRequestInput implements ArraySerializableInterface {
InputFilter
设置从module.config.php
移动到分离InputFilter
文件/类
现在我有了CompanyId
和UserId
字段。必须设置其中一个(一个且仅一个)。我用回调
验证器尝试了这一点,见下文。但它不起作用:如果两个字段都丢失,则不会执行验证
如何解决这个问题
class AddressPostRequestInput implements ArraySerializableInterface {
...
public function __construct() {
$this->dataSet = [
'CompanyId' => null,
'UserId' => null,
'Type' => null,
];
}
...
public function getInputFilter() {
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
...
$inputFilter->add($factory->createInput(array(
...
$inputFilter->add($factory->createInput(array(
'name' => 'CompanyId',
'required' => false,
'filters' => array(
...
),
'validators' => array(
array(
'name' => 'Callback',
'options' => array(
'callback' => function ($value, $context = array()) {
$isValid =
(isset($context['UserId']) && !isset($context['CompanyId'])) ||
(!isset($context['UserId']) && isset($context['CompanyId']))
;
return $isValid;
},
),
),
$inputFilter->add($factory->createInput(array(
'name' => 'UserId',
'required' => false,
'filters' => array(
...
),
'validators' => array(
array(
'name' => 'Callback',
'options' => array(
'callback' => function ($value, $context = array()) {
$isValid =
(isset($context['UserId']) && !isset($context['CompanyId'])) ||
(!isset($context['UserId']) && isset($context['CompanyId']))
;
return $isValid;
},
),
),
)));
$this->inputFilter = $inputFilter;
}
...
}
我永远记不清这些设置需要什么组合,但它会是这样的:
$inputFilter->add($factory->createInput(array(
'name' => 'CompanyId',
'required' => false,
'allow_empty' => true,
'continue_if_empty' => true,
'filters' => array(
...
),
可能需要稍微调整一下,但应该可以用
如果为空,则继续,并允许为空设置和已实现的回调验证程序