Laravel 5.4 - Wie man mehrere Fehlermeldungen für denselben benutzerdefinierten Gültigkeitsregel

Um die Wiederverwendung von code, habe ich meinen eigenen validator Regel in einer Datei mit dem Namen ValidatorServiceProvider :

class ValidatorServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('checkEmailPresenceAndValidity', function ($attribute, $value, $parameters, $validator) {
            $user = User::where('email', $value)->first();

            //Email has not been found
            if (! $user) {
                return false;
            }

            //Email has not been validated
            if (! $user->valid_email) {
                return false;
            }

            return true;
        });
    }

    public function register()
    {
        //
    }
}

Und ich verwende eine Regel wie diese :

public function rules()
{
    return [
        'email' => 'bail|required|checkEmailPresenceAndValidity'
    ];
}

Aber, ich möchte verschiedene Fehlermeldungen für jeden Fall, so etwas wie dieses :

if (! $user) {
    $WHATEVER_INST->error_message = 'email not found';
    return false;
}

if (! $user->valid_email) {
    $WHATEVER_INST->error_message = 'invalid email';
    return false;
}

Aber ich nicht herausfinden, wie dies zu erreichen, ohne dabei 2 verschiedene Regeln ...

Natürlich könnte es klappen mit mehreren Regeln, sondern es wird auch die Ausführung mehrerer SQL-Abfragen, und ich wirklich wollen, dies zu vermeiden.

Auch im Auge behalten, dass im realen Fall hätte ich mehr als 2 Validierungen wie Thesen in einer einzigen Regel.

Hat jemand eine Idee ?

=====

EDIT 1 :

Eigentlich, denke ich, dass ich will, dass etwas funktioniert in einer ähnlichen Art und Weise als die beetween oder size Regeln.

Sie repräsentieren eine einzige Regel, bieten aber mehrere Fehlermeldungen :

'size'                 => [
    'numeric' => 'The :attribute must be :size.',
    'file'    => 'The :attribute must be :size kilobytes.',
    'string'  => 'The :attribute must be :size characters.',
    'array'   => 'The :attribute must contain :size items.',
],

Laravel prüft, ob der Wert steht für eine numerische, eine Datei, einen string oder ein array sein ; und wird die richtige Fehlermeldung zu verwenden.

Wie erreichen wir diese Art der Sache mit benutzerdefinierten Regel ?

InformationsquelleAutor Marc | 2017-06-22
Schreibe einen Kommentar