【问题标题】:Laravel Illuminate\Validation\Rule not foundLaravel Illuminate\Validation\Rule 未找到
【发布时间】:2020-01-10 00:49:01
【问题描述】:

我正在尝试提交表单并验证内容。 在其中一个请求中,我需要制定一个特殊规则。 我遵循了文档,它说要使用唯一并声明规则。

use Illuminate\Validation\Rule;

Validator::make($data, [
'email' => [
    'required',
    Rule::unique('users')->ignore($user->id),
],
]);

我正在尝试使用文档中的示例,但我得到的只是这个错误:

Class 'Illuminate\Validation\Rule' not found

我声明了这条线

use Illuminate\Validation\Rule;

在我的控制器中,但错误仍然存​​在。

【问题讨论】:

  • 我也有同样的问题。 Laravel 似乎不包含 Rule 类。我正在寻找如何添加它。
  • 你解决了吗?
  • 你使用的是哪个版本的 Laravel?

标签: php laravel laravel-validation


【解决方案1】:

您发布的示例中的 Rule 类用于验证唯一字段。例如,如果您有一封电子邮件,您将希望在表中是唯一的,当您要编辑记录时,保存时会收到验证器错误,因为您正在保存相同的电子邮件,它已经在数据库中。

您发布的示例:

use Illuminate\Validation\Rule;

Validator::make($data, [
'email' => [
    'required',
    Rule::unique('users')->ignore($user->id),
],
]);

与此案例相关,编辑记录并验证电子邮件(在表用户中唯一)。此示例避免针对同一用户验证电子邮件-

要使用它,您必须添加类(未包含在 laravel 安装程序中)。 Here你有它。

在您的问题中,您提到了使用唯一规则。唯一规则适用于在表格、电子邮件、个人身份(法律)等中必须唯一的字段。验证唯一规则是否是您所需要的。

【讨论】:

    【解决方案2】:

    您不必为此使用 Rule 类。

    只需使用以下规则即可:

    'email' => 'required|unique:users,email,' . $user->id
    

    【讨论】:

    • 我试过这个。但我的列名不是 id。我可以写 .',columnname' 但由于某种原因这不起作用。它不会忽略此条目..
    • 列名是什么?
    • 'league_id' 是列名
    • 那么这应该可以工作:'email' => 'required|unique:users,email,' . $user->id . ',league_id'
    • 我以前试过这个,但它不起作用。我有 laravel 5.3
    【解决方案3】:

    Illuminate\Validation\Rule 类已添加到 Laravel 5.3+。
    我几乎可以肯定你已经用旧的 laravel 版本进行了测试。

    请参阅问题 (PR) 15809:[5.3] Object based unique and exists rules for validation.

    【讨论】:

      【解决方案4】:

      我在版本 v5.3 上遇到了这个问题。我刚刚更新到最新的补丁版本(在我的情况下为v5.3.31)并且一切正常!

      【讨论】:

        【解决方案5】:
            use Illuminate\Validation\Rule;
        
        Validator::make($data, [
        'email' => [
            'required',
            Rule::unique('users')->ignore($user->id),
        ],
        ]);
        

        到目前为止,您已经完成了一切,直到您添加了该行 "Rule::unique('users')->ignore($user->id)"

        这不起作用的唯一原因是您没有指定要唯一的列名。假设,在您的数据库中,您希望唯一的表 users 的列名称是“email”。那么,你的代码应该如下:

        use Illuminate\Validation\Rule;
        
        Validator::make($data, [
        'email' => [
            'required',
            Rule::unique('users', 'email')->ignore($user->id),
        ],
        ]);
        

        因此,

        //Right Way
        "Rule::unique('users', 'email')->ignore($user->id)"
        
        //Wrong Way
        "Rule::unique('users')->ignore($user->id)"
        

        【讨论】:

          【解决方案6】:

          你为什么不试试这样的方法:

          $validator = Validator::make($request->all(), [
              'email' => 'required|unique:<table_name>',
          ]);
          
          if ($validator->fails()) {
              ...
          }
          

          如果你列如果也命名为电子邮件 laravel 会自动知道,否则做

          required|unique:<table_name>,<column_name>
          

          这里是文档验证部分的链接:https://laravel.com/docs/5.3/validation

          【讨论】:

          • 无用的答案。在发布之前阅读文档。他问的是关于文档的问题。
          猜你喜欢
          • 1970-01-01
          • 2018-06-20
          • 2014-08-07
          • 2015-04-16
          • 1970-01-01
          • 1970-01-01
          • 2015-06-15
          • 2019-06-05
          • 2018-10-04
          相关资源
          最近更新 更多