【问题标题】:Make Ardent in Laravel not requiring new password on save在 Laravel 中制作 Ardent 保存时不需要新密码
【发布时间】:2014-01-27 00:17:15
【问题描述】:

我正在为我的管理面板做用户编辑工具。我想在更新时忽略空密码,而不是在创建时忽略。

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

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

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

如何让它发挥作用?

【问题讨论】:

    标签: php laravel-4 ardent


    【解决方案1】:

    如果您想将此行为整合到模型本身(因此无论从何处创建/保存它都无关紧要),您可以利用 Ardent 的 beforeValidate 函数在验证之前更改规则:

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

    您只需在相关模型的任何位置添加类似的代码。

    【讨论】:

      【解决方案2】:

      你可以在你的控制器中做这样的事情:

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

      【讨论】:

      • 但是当我想更改密码时,不需要确认。这是不可取的。
      【解决方案3】:

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

      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 个输入的表格。不涉及其他用户数据。已编辑。
      猜你喜欢
      • 2014-04-11
      • 2014-01-27
      • 2014-05-08
      • 2013-03-26
      • 1970-01-01
      • 2012-02-29
      • 2014-02-14
      • 2020-08-04
      • 1970-01-01
      相关资源
      最近更新 更多