我正在为管理员面板执行用户编辑工具。我想在更新时忽略空密码,但不在创建时忽略。
我有以下用户模型的验证规则:
public static $rules = array(
'login' => 'required|max:255|alpha_dash|unique',
'displayname' => 'required|max:255|unique',
'email' => 'required|email|max:255|unique',
'password' => 'required|confirmed',
'password_confirmation' => 'required',
);
但是当我没有向其传递密码时,它不允许我更新用户模型。它只是抱怨没有密码。
如何让它发挥作用?
答案 0 :(得分:3)
您可以在控制器中执行以下操作:
if ($user->exists)
{
$user::$rules['password'] = (Input::get('password')) ? 'required|confirmed' : '';
$user::$rules['password_confirmation'] = (Input::get('password')) ? 'required' : '';
}
$user->save();
答案 1 :(得分:1)
这是人们仍在思考的问题。但通常创建规则和更新规则会有所不同。
public static $create_rules = array(
'login' => 'required|max:255|alpha_dash|unique',
'displayname' => 'required|max:255|unique',
'email' => 'required|email|max:255|unique',
'password' => 'required|confirmed',
'password_confirmation' => 'required',
);
public static $update_rules = array(
'login' => 'required|max:255|alpha_dash|unique',
'displayname' => 'required|max:255|unique',
'email' => 'required|email|max:255|unique',
);
然后在验证码中,您可以
if ( ! $this->exists || Input::get('password'))
{
$validation_rules = static::$create_rules;
}
else
{
$validation_rules = static::$update_rules;
}
答案 2 :(得分:1)
如果要将此行为合并到模型本身(因此创建/保存它的位置无关紧要),您可以在验证前使用Ardent的beforeValidate
函数更改规则:
public function beforeValidate()
{
if(isset($this->id))
{
self::$rules['password'] = 'confirmed';
self::$rules['password_confirmation'] = '';
}
}
您只需在相关模型中的任何位置添加类似代码。