【问题标题】:Laravel sometimes validation rule not workingLaravel 有时验证规则不起作用
【发布时间】:2018-11-09 02:57:27
【问题描述】:

我正在尝试将sometimes 验证规则实施到我的一个项目(Laravel 5.6)中。

我有一个用户可以更新他们的姓名和密码的个人资料页面,但我想这样做,以便如果用户不输入密码,它不会更新该字段,这是我认为有时规则的内容。

我在控制器中使用的完整更新方法如下。

如果我将密码字段留空,那么它会返回一个不应出现的字符串或最小错误。

public function update()
{
    $user = Auth::user();

    $this->validate(request(), [
        'name' => 'required',
        'password' => 'sometimes|string|min:6'
    ]);

    $user->name = request('name');
    $user->password = bcrypt(request('password'));

    $user->save();

    return back();
}

任何帮助将不胜感激。

【问题讨论】:

  • 如果您不更新密码字段,则不应在请求中传递密码字段。当您在请求中传递密码字段(甚至是空字符串)时,该验证规则将检查它是否为字符串以及是否至少为 6 个字符长。
  • 让我直截了当地说:如果没有输入密码,还应该更新名称吗?
  • @Sebastian 是的,在编辑个人资料页面上

标签: laravel laravel-5 laravel-validation


【解决方案1】:

问题是,如果您将密码字段留空,它仍然存在于请求中。但充斥着null

试试这个:

public function update()
{
    $user = Auth::user();

    $this->validate(request(), [
        'name' => 'required',
        'password' => 'nullable|string|min:6'
    ]);

    $user->name = request('name');

    if(!is_null(request('password'))) {
        $user->password = bcrypt(request('password'));
    }

    $user->save();

    return back();
}

【讨论】:

  • 嗯,有道理,如果没有条件,它总是会更新密码......谢谢!
【解决方案2】:

尝试在验证规则中添加 nullable

$this->validate(request(), [
    'name' => 'required',
    'password' => 'sometimes|nullable|string|min:6'
]);

来自Laravel docs

可空

验证中的字段可能为空。这个特别有用 当验证原语(如字符串和整数)时,可以 包含空值。

【讨论】:

猜你喜欢
  • 2017-06-21
  • 2020-03-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2014-11-29
  • 2020-07-17
  • 2018-07-18
  • 2023-04-02
相关资源
最近更新 更多