【问题标题】:Laravel 5.1: Custom validatorwith custom error messagesLaravel 5.1:带有自定义错误消息的自定义验证器
【发布时间】:2015-10-02 16:11:57
【问题描述】:

我是 Laravel 的新手,我尝试构建一个应用程序,在某些时候,我有一个表单,其中我设置了一个数组字段,以允许最终用户输入尽可能多的信息。

我的表单域是这样的:

<div class="rule">
    <div class="target">

        <select name="rule[0][0][target]" id="target_NSBYS" class="form-control">
            <option value="url">URL</option>
            <option value="referrer">Referrer</option>
        </select>
    </div>
    <div class="condition">
        <select name="rule[0][0][condition]" id="condition_NSBYS" class="form-control">
            <option value="equals">Equals</option>
            <option value="contains">Contains</option>
            <option value="starts_with">Starts With</option>
            <option value="ends_with">Ends With</option>
            <option value="regex">Matches RegExp</option>
            <option value="not_equal">Doesn't Equal</option>
            <option value="not_contains">Does not contain</option>
            <option value="not_starts_with">Does not start with</option>
            <option value="not_ends_with">Does not end with</option>
            <option value="not_regex">Does not match RegExp</option>
        </select>
    </div>
    <div class="rule">
        <input type="text" id="rule_NSBYS" name="rule[0][0][rule]" placeholder="Rule value" value="" class="form-control">
    </div>
    <div class="actions">
        <a href="javascript:void(0)" class="removeRule btn btn-sm btn-default">-</a>
        <a href="javascript:void(0)" class="addRule btn btn-sm btn-default">+</a>
    </div>
</div>

所以,我在后端注册了一个新的服务提供者,以便在这个类中注册我所有的自定义验证规则。

服务提供者是这样的:

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class CustomValidationRules extends ServiceProvider
{
    public function boot()
    {
        Validator::extend(
            'campaign_rules',
            function ( $attribute, $value, $parameters ) {

                $valid = true;

                foreach ( $value as $group_id => $group_fields ) {

                    foreach ( $group_fields as $field_id => $field_set ) {
                        $result = Validator::make(
                            $field_set,
                            array(
                                'target'    => 'required|in:url,referrer',
                                'condition' => 'required|in:equals,contains,starts_with,ends_with,regex,not_equal,not_contains,not_starts_with,not_ends_with,not_regex',
                                'rule'      => 'required'
                            ),
                            array(
                                'target.required' => sprintf(
                                    'The target field in the %d rules group, in the %d rule it is required',
                                    $group_id,
                                    $field_id
                                ),
                                'target.in' => sprintf(
                                    'The target field in the %d rules group, in the %d rule contains a wrong value',
                                    $group_id,
                                    $field_id
                                ),
                                'condition.required' => sprintf(
                                    'The conditional field in the %d rules group, in the %d rule it is required',
                                    $group_id,
                                    $field_id
                                ),
                                'condition.in' => sprintf(
                                    'The conditional field in the %d rules group, in the %d rule contains a wrong value',
                                    $group_id,
                                    $field_id
                                ),
                                'rule.required' => sprintf(
                                    'The rule field in the %d rules group, in the %d rule can\'t be empty',
                                    $group_id,
                                    $field_id
                                )
                            )
                        );

                        if ( $result->fails() ) {
                            $valid = false;

                            break 1;
                            break 2;
                        }
                    }
                }

                return $valid;
            }
        );
    }
}

我还有一个自定义请求类来验证我的表单数据并包含以下代码:

<?php

namespace App\Http\Requests;

use App\Eb\Helpers;
use App\Http\Requests\Request;

class CampaignValidation extends Request
{
    public function authorize()
    {
        if ( Helpers::is_super_admin() || Helpers::is_client() ) {
            return true;
        }

        return false;
    }

    public function rules()
    {
        return [

            'name'             => 'required|max:255',
            'status'           => 'required|in:active,paused,archived',
            'publication_date' => 'required|date_format:Y-m-d H:i',
            'expiration_date'  => 'required|date_format:Y-m-d H:i',
            'mode'             => 'required|in:normal,aggressive',
            'rule'             => 'campaign_rules'

        ];
    }
}

因此,通过使用此代码,我可以正常验证我的代码,但不幸的是,我在验证过程后收到的错误消息如下:

Errors occurred
    validation.campaign_rules

这并不好。正如您已经看到的,在服务提供者中,当我使用 Validator::make 时,我使用第三个参数,以便返回正确的错误消息。

所以问题是,我怎样才能在我的应用程序前面发送这个自定义错误消息?

【问题讨论】:

  • 为什么是rule.rule.required?不应该是rule.campaign_rules吗?在 5.1 中,我认为消息是在语言文件中设置的。
  • 这只是一个实验,我忘了删除它。我尝试了很多想法,但没有一个奏效:(关于如何解决这个问题的任何想法?
  • 在这种情况下,我建议检查您的验证语言文件,英语为resources/lang/en/validation.php。有一个数组可以添加自定义验证规则。
  • @MerianosNikos 你还有这个问题吗?如果没有,我很想知道您是如何解决的。
  • @CodeSlayer2010 不幸的是我没有。我不知道如何解决这个问题。请确保如果我能找到解决方案,我会在此处发布;)

标签: php validation laravel laravel-5


【解决方案1】:

尝试在您的 FormRequest 中覆盖 messages() 方法,如下所示:

public function messages()
{
    return [
        'validation.campaign_rules' => 'My custom validation message',
    ];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2014-05-31
    • 2017-06-28
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多