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

标签 validation cakephp formhelper

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

相关文章:

php - 我应该如何设置我的开发环境以将代码滚动到实时网站中?

forms - cakePHP 表单输入标签覆盖 inputDefaults

validation - 是否存在有效的 HTML5 片段之类的东西?

javascript - 根据 if 语句添加到 Javascript 数组

javascript - 我的 JavaScript 验证表单不工作

cakephp - 在CakePHP中使用FormHelper创建 'select'列表框

cakephp - 使用 jQuery 拦截 cake2 postLink() 表单帖子

ruby-on-rails - 为什么 HABTM 上的 "validate"选项不起作用?

.htaccess - CakePHP 和 AngularJs 中的路由和谐 : htaccess rules to send user to index. html 或 bootstrap index.php

php - 使用 CakePHP 检查用户是否登录