0

在 UsersTable 类中,我试图在 CakeBook 之后实现自定义验证,但我收到一条错误消息,Object of class App\Model\Table\UsersTable could not be converted to string [CORE/src/Validation/ValidationRule.php, line 128]. 下面是我在 UsersTable.php 中的代码。

class UsersTable extends Table{
    public function validationDefault(Validator $validator){
        $validator->add(
            "password",[
                 "notEmpty"=>[
                     "notEmpty"
                 ],
                 "custom"=>[
                     "rule"=>[$this,"customFunction"],
                     "message"=>"foo"
                 ]
             ]
        );
    }
    public function customFunction($value,$context){
        //some logic here
    }
}

查看ValidationRule.php核心 CakePHP 库,我注意到array_shift()(在第 185 行)正在获取 的第一个元素[$this,"customFunction"],也就是说,$this并将其分配给$value. 但实际上$value应该是[$this,"customFunction"]。因此,为了让我的代码能够正常工作,我需要再添加一个嵌套[$this,"customFunction"](现在就是这样[[$this,"customFunction"]])。我误解了什么还是这是某种错误?

UPD:此问题现已修复。

4

2 回答 2

1

我想你已经正确地发现了,问题似乎是 CakePHP 期望rule键值在

[string or callable, ...args]

当它在数组中时格式化,即它不测试值本身是否已经是可调用的。

文档说非嵌套变体应该可以工作,因此您可能希望将此报告为错误。

于 2014-08-21T15:40:14.487 回答
1

在您的模型中使用它进行自定义验证

public function validationCustom($validator)
{
    return $validator
        ->notEmpty('username', 'A username is required');
}

当您要保存或更新时,请在控制器中使用验证方法名称(除了验证关键字)

$user = $this->Articles->newEntity($this->request->data,
        ['validate' => 'custom']);
于 2015-01-11T11:39:13.327 回答