【问题标题】:Lithium PHP framework - submitted model property disappears before saveLithium PHP 框架 - 提交的模型属性在保存前消失
【发布时间】:2014-03-21 18:07:21
【问题描述】:

我正在开发一个使用 Lithium PHP 框架构建的项目,但遇到了一个奇怪的问题:

我有两个用户控制器 - 一个用于网站前端,一个用于管理面板。两者都有edit()方法,调用Users模型的save方法。

问题是这个:

当我尝试在管理面板中更改密码时 - $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) { ... 

谢谢。

【问题讨论】:

  • 您是否完成了数据转储(即$request->data$user->data())以查看它是否确实存在并被填充?仅根据您的描述,您的字段名称 (confirmPassword) 和验证规则 (passwordConfirm) 之间可能存在不匹配。请参阅models/Users.php,第 57 行。
  • 当我在addedit 方法中进行转储时,$request->data 包含具有正确值的passwordpasswordConfirm 属性,而$user->data() 没有...它只包含password,并且那里的值已经加密。 (事实上​​——我猜这发生在实际尝试保存数据之后。)
  • (顺便说一句,confirmPassword 是我的错误,我没有这样的东西 :) ... 它到处都是 passwordConfirm - 在视图、模型等中)

标签: php frameworks resources lithium


【解决方案1】:

我找到了问题的原因:) ...

关于验证规则,由以前的开发者在模型中定义,有这个子句:

'on' => 'create'

导致编辑时验证规则未触发。

PS:我试图在验证本身中转储规则(在这个类中 - https://github.com/UnionOfRAD/lithium/blob/master/util/Validator.php - 在第 469 行的匿名函数中:

return static::_filter(__FUNCTION__, $params, function($self, $params) {

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多