我正在开发一个使用Lithium PHP框架构建的项目,并且有一个奇怪的问题:
我有两个用户控制器 - 一个用于站点的前端,另一个用于管理面板。它们都有edit()
方法,可以调用save
模型的Users
方法。
问题出在这一点:
当我尝试在管理面板中更改密码时,$request->data
包含confirmPassword
POST字段---但是 - 它的验证规则永远不会触发。
当我尝试在前端注册用户时 - confirmPassword
触发器的验证。
这些方法有一个相同的代码:
public function {add / edit} ($request, $user) {
if (!$request->data) {
return array(200, $user);
}
$success = $user->save();
return array($success, $user);
}
验证规则在模型中,&它使用config/bootstrap/validation.php
中使用此代码定义的自定义验证:
Validator::add('matchesPassword', function($value, $format, $options) { ...
最后 - 该网站使用Lithium PHP框架构建(对我而言是新的)并使用li3_resources
,所有控制器和模型都扩展了此Resource
类。
那么......这个POST字段会在哪里消失? ......任何线索? ......
编辑:当我写public function {add / edit} ($request, $user) {
时,我指的是两种方法:
public function add($request, $user) { ...
public function edit($request, $user) { ...
感谢。
答案 0 :(得分:0)
我找到了问题的原因:) ...
在先前开发人员在模型中定义的验证规则中,有以下子句:
'on' => 'create'
导致验证规则在编辑时不会触发。
PS:我试图将规则转储到验证本身(在这个类中 - https://github.com/UnionOfRAD/lithium/blob/master/util/Validator.php - 在第469行的annonimous函数中:
return static::_filter(__FUNCTION__, $params, function($self, $params) {
但倾销从未发生过? ...可能如果它在那里工作 - 这可以节省我一些时间......