我正在CakePHP中创建一个“表单编辑器”。
界面允许用户选择要应用于字段的验证,例如数字,电子邮件等。
因此,我需要根据用户输入动态创建模型验证。为此,我可以使用Validation对象:https://book.cakephp.org/3.0/en/core-libraries/validation.html
我想利用FormHelper的功能,例如,自动输出字段的错误消息。
我可以看到如何使用模型中的硬编码验证器通过在Form-> create()的上下文选项中设置验证器来完成此操作 - 但是如何使用已经使用的客户$ Validator对象动态创建?
澄清:
我的控制器中有一些代码:
//get the form configuration
$form = $this->Forms->get($id, ['contain'=>['FormFields'=>['Validations']]]);
//set up validation based on the configuration
$validator = new Validator();
foreach($form->form_fields as $field){
...
if($field->required) $validator->notBlank($field->field_name);
}
$table = TableRegistry::get($form->type);
$table->setValidator($validator);
不幸的是,setValidator()不是TableRegistry的方法。
如果我在模型中设置验证,我需要$ id参数来查找正确的表单配置。
答案 0 :(得分:1)
我将以下代码添加到我的模型中:
protected $validator = null;
public function validationDefault(Validator $validator){
if($this->validator != null) return $this->validator;
return $validator;
}
public function setValidator(Validator $validator){
$this->validator = $validator;
}
因此可以通过setValidator方法有效地设置默认验证器。
然后在我的控制器中:
//get the form configuration
$form = $this->Forms->get($id, ['contain'=>['FormFields'=>['Validations']]]);
//set up validation based on the configuration
$validator = new Validator();
foreach($form->form_fields as $field){
...
if($field->required) $validator->notBlank($field->field_name);
}
$table = TableRegistry::get($form->type);
$table->setValidator($validator);
我希望这对其他人有用。