【问题标题】:Laravel 5 custom validationLaravel 5 自定义验证
【发布时间】:2015-05-10 02:58:31
【问题描述】:

我是 Laravel 5 的初学者。基本上我有两个表,用户表和团队表。我使用了内置的注册功能并对其进行了更改。在用户注册之前,他必须知道他所属的团队名称(下拉列表)以及团队代码。如果团队代码与他选择的团队名称不匹配,则只会显示验证错误。我应该如何在团队代码的验证规则中引用输入(团队名称)?我听说过存在验证规则,但我认为自定义规则是正确的。

在我的 registrar.php 中:

public function validator(array $data)
{
    return Validator::make($data, [
        'username' => 'required|max:255',
        'password' => 'required|confirmed|min:6',
        'firstname' => 'required|max:255',
        'lastname' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'team_id' => 'required',
        // 'team_code' => don't know what to put here.
    ]);
}

我在谷歌上搜索了 Laravel 的自定义验证,似乎还不足以让我了解它是如何工作的。有人可以帮我解决这个问题吗?非常感谢您的帮助!

【问题讨论】:

    标签: php validation laravel registration


    【解决方案1】:

    您可以使用带有允许 where 子句的扩展格式的存在验证器,并传递您的 team_id 以确保 id 和代码存在于同一行中:

    'email' => 'required|email|max:255|unique:users',
    'team_id' => 'required',
    'team_code' => 'exists:teams,code,team_id,' . Input::get('team_id')
    

    这将检查team_code 是否存在于teams 表中team_id 与作为输入给出的ID 匹配的行中。

    您可以使用自定义验证器,但我认为它不会对您的应用程序增加太多 - 这实际上并不是您的应用程序特定的一段将被重用的逻辑。任何自定义验证器仍然需要您将用户的 team_id 附加到验证字符串,这不是一个完全干净的方法。

    您甚至可以考虑将这种类型的应用程序特定逻辑检查移到验证器之后 - 验证器的意图似乎主要是针对某些静态条件检查输入以检查其是否正常。在提供的验证器中不会发生很多数据库交互,只有existsunique

    来源:Documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2015-04-09
      • 2015-01-26
      • 2015-08-02
      • 2017-02-20
      • 2012-11-27
      • 2015-06-02
      相关资源
      最近更新 更多