【问题标题】:Laravel Updating a recordLaravel 更新记录
【发布时间】:2023-03-28 06:15:02
【问题描述】:

我在更新记录时遇到问题。我有一个用户可以注册的页面,这个页面完美无缺,并且有 4 个字段:电子邮件、用户名、密码和确认密码。这是一个简单的注册页面,我不想通过提供很多要填写的东西来关闭访问者,比如全名和国家,所以这两个字段可以在他们的“更新个人资料”页面上更新。个人资料页面分为多个区域,主要区域是一个单一的表单,其中只有这 2 个字段可以更新,因此这里没有用户名、电子邮件、密码字段 - 只有全名和国家。

控制器更新配置文件代码

$user = User::find($id);

    $user->fullname = Input::get('fullname');
    $user->country = Input::get('country');


    if (!$user->save())
    {

        return Redirect::to('edit-profile')->withInput()->withErrors($user->errors());  

    } else {


        return Redirect::to('edit-profile')->withMessage('Profile successfully updated!');

    }       

我的用户模型规则。我正在使用 Ardent:

public static $rules = array(
  'username' => 'required|between:3,20|unique:users|alpha_dash',
  'email' => 'required|email|unique:users',
  'password' => 'required|min:5|confirmed',
  'password_confirmation' => 'min:5',
  'fullname' => 'between:5,50',
  'country' => 'between:3,50'
);

这里的问题是它返回一条错误消息说“密码不匹配。”。所以看起来 Laravel 在查询中添加了密码字段,并且还尝试验证密码是否匹配。我不想为此创建单独的模型或单独的规则。我该如何解决这个问题?

【问题讨论】:

    标签: laravel ardent


    【解决方案1】:

    要在不显示密码时使其工作,您可以测试是否显示密码,然后在控制器中将其设为必填字段:

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

    【讨论】:

    • 我看到在创建或更新模型时也有不同的规则,这也可以工作
    • 这行得通,但更像是一种 hack,违背了拥有一个规则集的目的。不过谢谢,它就像一个魅力!
    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 2015-06-12
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2015-12-17
    • 2016-12-20
    相关资源
    最近更新 更多