Laravel 5.3 - 自定义验证器

时间:2016-09-04 15:17:54

标签: php json laravel laravel-5 laravel-5.3

我有一个名为“name”的输入验证器:

Regex:/^[A-Za-z0-9\\s\\-\\/,.]*$/|min:5|max:50

但是,我想在我的网站中以多种形式使用此验证器。 如果不在所有表单验证中复制此验证器,我该怎么做?

我的数据库包含名为“settings”的表,每一行都显示网站的设置。每个设置都包含保存设置数据的Json代码。 我想创建自定义验证器,检查输入值是否等于我的数据库中的Json代码中的一个值。 我有这样的Json代码:

[{"US":"United States", "UK":"United Kingdom"}]

我想检查输入的值是否等于Json代码中的一个值。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我知道你说过,在你的网站上。但是,我认为您确保使用相同验证器的表单的使用相对处于相同的状态。 这是一个帮助我到达我需要的地方的例子!我希望它是一个足够好的指南!:

MessageBag文档:http://laravel.com/docs/5.0/validation#error-messages-and-views

公共职能postLogin(请求$请求)

public function postLogin(Request $request)
{

    $validator = Validator::make($request->all(), [
        'email' => 'required|email', 'password' => 'required',
    ]);

    if ($validator->fails())
    {
        return redirect($this->loginPath())->withErrors($validator, 'loginErrors');
    }

    $credentials = $this->getCredentials($request);

    if (Auth::attempt($credentials, $request->has('remember'))) {
        return redirect()->intended($this->redirectPath());
    }

    return redirect($this->loginPath())
        ->withInput($request->only('email', 'remember'))
        ->withErrors([
            'email' => $this->getFailedLoginMessage(),
        ], 'loginErrors');
}

现在您可以查看视图中的错误:

@if (!$errors->loginErrors->isEmpty())
<div class="form_error_login">
    <strong>Whoops!</strong> There were some problems with your input.<br>    <br>
        <ul>
            @foreach ($errors->loginErrors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
</div>
@endif

对于模态(如果使用它们):

<script>
    $findError = $('div').find ('div');
    if ( $findError.hasClass('form_error_login')){
        $('#modalLogin').foundation('reveal', 'open');
    }
    if ( $findError.hasClass('form_error_register')){
        $('#modalRegister').foundation('reveal', 'open');
    }
</script>

<强>参考:

https://laracasts.com/discuss/channels/laravel/authcontroller-loginregistration-on-same-page