【发布时间】: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 行。 -
当我在
add和edit方法中进行转储时,$request->data包含具有正确值的password和passwordConfirm属性,而$user->data()没有...它只包含password,并且那里的值已经加密。 (事实上——我猜这发生在实际尝试保存数据之后。) -
(顺便说一句,
confirmPassword是我的错误,我没有这样的东西 :) ... 它到处都是passwordConfirm- 在视图、模型等中)
标签: php frameworks resources lithium