Lithium PHP框架 - 提交的模型属性在保存之前消失

时间:2014-03-21 18:07:21

标签: php frameworks resources lithium

我正在开发一个使用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) { ... 

感谢。

1 个答案:

答案 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) {

但倾销从未发生过? ...可能如果它在那里工作 - 这可以节省我一些时间......