【问题标题】:ajax validate specific column in cakephp 3ajax 验证 cakephp 3 中的特定列
【发布时间】:2017-04-24 10:59:20
【问题描述】:

我正在使用 CakePHP 3.4

我有一个users 模型和具有usernameemailmobilenamepassword 的列。 usernameemailmobile 字段有一些验证规则,包括所有三个都是唯一值。

我正在使用 Ajax 调用更改字段值来验证具有自定义函数的字段,例如 ajaxValidateUsername(),它手动检查所有验证规则,因此模型中指定的验证规则没有被使用。

是否可以使用 ajax 对特定字段进行验证并返回 Users 模型中验证规则中指定的错误消息?

到目前为止,我已经在 `ajaxValidateUsername() 中实现了这一点,并从文档中进行了一些修改

$validator = new Validator();
$errors = $validator->errors($this->request->getData('username'));

但是,它不起作用。

【问题讨论】:

  • 为什么不进行正常的修补并返回实体的错误呢?更干净,与当前的蛋糕方式一致。
  • 我认为这将验证所有设置为 notEmpty 的字段,因为其余字段可能是空的那一刻我只想验证一个字段
  • Cakephp 3.x 允许您动态创建验证对象。如果您只需要验证 1 个字段,我会将您的 ajax 指向一个为该字段构建验证器并根据规则验证数据的操作。 book.cakephp.org/3.0/en/core-libraries/…
  • @AnujTBE 您是否向新实例化的验证对象添加了任何规则?例如$validator->notEmpty('username', 'Please fill this field') 在调用errors() 方法之前?
  • 我需要在控制器中重新实例化吗?我已经向UsersTable.php 添加了验证规则,只想为特定列调用它们

标签: ajax validation cakephp cakephp-3.4


【解决方案1】:

在 CakePHP 3.x 中,您可以创建不同的验证集并在修补实体时使用它们。请参阅docs

因此,您可以在控制器中创建一个仅验证某些属性的方法。

class UsersTable extends Table
{
    public function validationUsername($validator)
    {
        $validator
            ->add('username', 'notEmpty', [
                'rule' => 'notEmpty',
                'message' => __('Please specify a username.'),
            ])
            ->add(…);
        return $validator;
    }
}

并在您的控制器中使用此验证方法。

$entity = $this->Users->newEntity(
    $this->request->getData(),
    ['validate' => 'username']
);
$success = !$entity->errors();

【讨论】:

  • 正是我一直在说的 :) 感谢您详细说明。但是你甚至不需要多个验证器。修补时使用 `'fields' => ['username']' 就足够了:)
  • @mark 你能举个例子说明如何使用'fields' => ['username'] 吗?
  • 只需$this->Users->patchEntity($user, ['fields' => ...]); - 不需要其他任何东西。
猜你喜欢
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2016-08-24
  • 2017-01-24
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多