使Ardent在Laravel不需要新的密码保存



我正在为我的管理面板提供用户编辑功能。我想在更新时忽略空密码,但在创建时不忽略。

我对用户模型有以下验证规则:

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',
);

但当我不把密码传给它时,它不允许我更新用户模型。它只是抱怨没有密码。

如何使其发挥作用?

您可以在控制器中执行以下操作:

if ($user->exists)
{
$user::$rules['password'] = (Input::get('password')) ? 'required|confirmed' : '';
$user::$rules['password_confirmation'] = (Input::get('password')) ? 'required' : '';
}
$user->save();

这是人们仍在思考的问题。但通常创建规则和更新规则会有所不同。

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;
}

如果您想将此行为合并到模型本身(因此从何处创建/保存它并不重要),您可以在验证之前使用Ardent的beforeValidate函数来更改规则:

public function beforeValidate() { if(isset($this->id)) { self::$rules['password'] = 'confirmed'; self::$rules['password_confirmation'] = ''; } }

您只需要在有问题的模型中的任何位置添加类似的代码。

最新更新