Laminas,将过滤后的字段集输入值传递给验证器工厂时出现问题
Laminas, problem with passing filtered fieldset inputs values to validator factory
我用的是最新版本的Laminas。我有一个通过 init()
添加到表单的字段集,它被设置为基本字段集。如果你在 fieldset 中定义 getInputFilterSpecification()
,在 Laminas 框架更新之前(我必须承认,我有几个月没有更新),我可以通过调用 $this->get('someName')->getValue()
在字段集的 getInputFilterSpecification()
中。这非常方便,因为如果你有一个通过工厂初始化的复杂验证器,并且你想将其他输入的值传递给这个验证器以实现复杂逻辑,你只需将需要的输入值分配给验证器中的 'options'
,像这样:
'someInputName' => [
'required' => false,
'filters' => [
['name' => StripTags::class],
['name' => StringTrim::class],
...
],
'validators' => [
['name' => NotEmpty::class],
[
'name' => AComplexValidator::class,
'options' => [
'parameter1' =>
$this->get('otherName1')->getValue(),
'parameter2' =>
$this->get('otherName2')->getValue(),
],
],
...
],
],
和parameter1
和parameter2
已经得到输入的过滤值,所以不需要在验证器中重新处理值。现在那里只提供原始的、未过滤的值 $this->get('otherName2')->getValue()
。
有没有办法为验证器工厂提供字段集输入的过滤值?还是我完全错了?
正确的做法是使用isValid()
中的第二个参数$context
:
<?php
class AComplexValidator extends AbstractValidator
{
public function isValid(mixed $value, ?iterable $context = null): bool {
// $context will contain all other field values of the Fieldset
}
}
相同的验证器正在使用这个,例如:https://github.com/laminas/laminas-validator/blob/2.16.x/src/Identical.php#L165
我用的是最新版本的Laminas。我有一个通过 init()
添加到表单的字段集,它被设置为基本字段集。如果你在 fieldset 中定义 getInputFilterSpecification()
,在 Laminas 框架更新之前(我必须承认,我有几个月没有更新),我可以通过调用 $this->get('someName')->getValue()
在字段集的 getInputFilterSpecification()
中。这非常方便,因为如果你有一个通过工厂初始化的复杂验证器,并且你想将其他输入的值传递给这个验证器以实现复杂逻辑,你只需将需要的输入值分配给验证器中的 'options'
,像这样:
'someInputName' => [
'required' => false,
'filters' => [
['name' => StripTags::class],
['name' => StringTrim::class],
...
],
'validators' => [
['name' => NotEmpty::class],
[
'name' => AComplexValidator::class,
'options' => [
'parameter1' =>
$this->get('otherName1')->getValue(),
'parameter2' =>
$this->get('otherName2')->getValue(),
],
],
...
],
],
和parameter1
和parameter2
已经得到输入的过滤值,所以不需要在验证器中重新处理值。现在那里只提供原始的、未过滤的值 $this->get('otherName2')->getValue()
。
有没有办法为验证器工厂提供字段集输入的过滤值?还是我完全错了?
正确的做法是使用isValid()
中的第二个参数$context
:
<?php
class AComplexValidator extends AbstractValidator
{
public function isValid(mixed $value, ?iterable $context = null): bool {
// $context will contain all other field values of the Fieldset
}
}
相同的验证器正在使用这个,例如:https://github.com/laminas/laminas-validator/blob/2.16.x/src/Identical.php#L165