我有一个有两个日期的表格,开始和结束。我有一个启动验证器,我想验证停止,而且停止是在启动之后。但是只有在 start 有效时,after 验证才有意义。
isValid($value, $context = null)
可以传递上下文变量中的其他值,但是我必须再次进行开始检查。
那么是否有可能在停止验证器的isValid()
功能中检查启动验证的结果?
我有一个有两个日期的表格,开始和结束。我有一个启动验证器,我想验证停止,而且停止是在启动之后。但是只有在 start 有效时,after 验证才有意义。
isValid($value, $context = null)
可以传递上下文变量中的其他值,但是我必须再次进行开始检查。
那么是否有可能在停止验证器的isValid()
功能中检查启动验证的结果?
您可以使用回调
或者只是编写自己的验证器
------ 编辑 - 我建议的答案 - 带有回调或验证器的输入过滤器 ------
我这样做是这样的。
首先创建一个包含所有参数的过滤器:
namespace MyGreatNameSpace\Filter;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Factory as InputFactory;
class MyDateFilter extends InputFilter
{
public function __construct($myGreatClass)
{
$factory = new InputFactory();
$this->add($factory->createInput(array(
'name' => 'start_date',
'required' => true,
'validators' => array(
array(
'name' => 'Date',
'options' => array(
'format' => '2000-10-10',
),
)
),
)));
$this->add($factory->createInput(array(
'name' => 'end_date',
'required' => true,
'validators' => array(
array(
'name' => 'Date',
'options' => array(
'format' => '2000-10-10',
),
),
array(
'name' => 'Callback',
'options' => array(
'callback' => array($myGreatClass, 'isDateNewer'),
'messages' => array(
'callbackValue' => "The end date is Older then the start date",
),
),
),
),
)));
} // End of __construct
}
创建回调函数
public function isDateNewer($date, $params)
{
$date2 = $params['start_date'];
if ($date > $date2) { // Over simplistic
return TRUE;
}
}
植入控制器(我使用服务来拉取表单/过滤器类)
// Get the form / validator objects from the SM
$form = $this->getServiceLocator()->get('date_form');
$filter = $this->getServiceLocator()->get('date_filter');
// Inject the input filter object to the form object, load the form with data and bind the result to the model
$form->setInputFilter($filter);
$form->setData($post);
$form->bind($myModel); // (if you wish to bind the data to whatever)
if (!$form->isValid()) {
return $this->forward()->dispatch.... (or whatever)
}
另一种稍微不同的方法(虽然更简洁)是编写一个验证器。检查Zend\Validator\Identical(注意令牌)
array(
'name' => '\Application\Validator\myNewNamedValidator',
'options' => array(
'token' => 'start_date',
'messages' => array(
'older' => "The end date is Older then the start date",
),
),
),