ajax验证cakephp 3中的特定列

ajax验证cakephp 3中的特定列,ajax,validation,cakephp,cakephp-3.4,Ajax,Validation,Cakephp,Cakephp 3.4,我在CakePHP3.4中工作 我有一个用户模型,列中有用户名,电子邮件,手机,姓名和密码username、email和mobile字段具有一些验证规则,包括所有三个都是唯一值 我正在使用Ajax调用更改字段值来使用自定义函数(如ajaxValidateUsername())验证字段,该函数在操作中手动检查所有验证规则,因此没有使用模型中指定的验证规则 我是否可以使用ajax对特定字段进行验证,并按照用户模型中的验证规则返回错误消息? 到目前为止,我已经在“ajaxValidateUsernam

我在CakePHP3.4中工作

我有一个
用户
模型,列中有
用户名
电子邮件
手机
姓名
密码
username
email
mobile
字段具有一些验证规则,包括所有三个都是唯一值

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

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

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

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

但是,它不起作用。

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

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

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();

为什么不进行正常的修补并返回实体的错误呢?更干净,与当前的蛋糕方式保持一致。我认为这将验证所有设置为
notEmpty
的字段,因为其余字段可能是空的,我只想验证一个字段CakePHP 3.x允许您动态创建验证对象。如果您只需要验证1个字段,我会将ajax指向一个为该字段构建验证器并根据规则验证数据的操作@AnujTBE您是否向新实例化的验证对象添加了任何规则?例如
$validator->notEmpty('username','Please fill this field')
在调用
errors()
方法之前?我是否需要在controller中重新实例化它?我已经在
UsersTable.php
中添加了验证规则,只想为特定的专栏调用它们,正如我一直在说的:)感谢您详细介绍。但您甚至不需要多个验证器。打补丁时使用`'fields'=>['username']'就足够了:)@mark你能举例说明如何使用
'fields'=>['username']
?只需
$this->Users->patchEntity($user,['fields'=>…])-不需要其他任何东西。