我正在 CakePHP 中创建一个“表单编辑器”。
该界面允许用户选择要应用于字段的验证,例如数字、电子邮件等
因此,我需要根据用户输入为模型动态创建验证。为此,我可以使用验证对象:https://book.cakephp.org/3.0/en/core-libraries/validation.html
我想利用 FormHelper 的功能,例如自动输出字段的错误信息。
通过在 Form->create() 的上下文选项中设置验证器,我可以看到如何使用模型中的硬编码验证器来执行此操作 - 但我如何使用动态生成的客户 $Validator 对象创建?
澄清:
我的 Controller 中有一些代码:
//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 参数来查找正确的表单配置。
最佳答案
我将以下代码添加到我的模型中:
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 方法有效地设置默认验证器。
然后在我的 Controller 中:
//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);
我希望这对其他人有用。
关于validation - 动态/动态 CakePhp 3 验证和 FormHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46474255/