gpt4 book ai didi

validation - 动态/动态 CakePhp 3 验证和 FormHelper

转载 作者:行者123 更新时间:2023-12-02 03:00:24 27 4
gpt4 key购买 nike

我正在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com