Zoeken…


parameters

Parameter Details
verplicht Het veld is verplicht
soms Voer validatiecontroles alleen uit voor een veld als dat veld in de invoerarray aanwezig is
e-mail De invoer is een geldig e-mailadres
maximum waarde De invoerwaarde moet lager zijn dan de maximale waarde
uniek: db_table_name De invoerwaarde moet uniek zijn in de gegeven databasetabelnaam
geaccepteerd Ja / Aan / 1 waar, handig voor het controleren van TOS
active_url Moet een geldige URL zijn volgens checkdnsrr
na : datum Het te valideren veld moet na de opgegeven datum een waarde opgeven
alpha Het te valideren veld moet volledig uit alfabetische tekens bestaan.
alpha_dash Het te valideren veld kan alfanumerieke tekens bevatten, evenals streepjes en onderstrepingstekens.
alpha_num Het te valideren veld moet volledig uit alfanumerieke tekens bestaan.
rangschikking Moet een PHP- array zijn
voor : datum Het veld moet een waarde onder de gegeven datum zijn
tussen: min, max De invoerwaarde moet tussen minimum (min) en maximum (max) liggen
boolean Het te valideren veld moet als een Boolean kunnen worden gecast. Geaccepteerde invoer is true , false , 1 , 0 , "1" en "0" .
bevestigd Het veld onder validatie moet een overeenkomend veld van foo_confirmation . Als het veld onder validatie bijvoorbeeld password , moet een bijbehorend password_confirmation aanwezig zijn in de invoer.
datum Het veld onder validatie moet een geldige datum zijn volgens de strtotime PHP-functie.
geheel getal Het te valideren veld moet een geheel getal zijn
draad Het te valideren veld moet een stringtype zijn.

Basis voorbeeld

U kunt aanvraaggegevens valideren met behulp van de validate (beschikbaar in de basiscontroller, verstrekt door de eigenschap ValidatesRequests ).

Als de regels passeren, blijft uw code normaal worden uitgevoerd; Als de validatie echter mislukt, wordt er automatisch een foutreactie met de validatiefouten teruggestuurd:

  • voor typische HTML-formulierverzoeken wordt de gebruiker omgeleid naar de vorige pagina, waarbij het formulier de ingediende waarden behoudt
  • voor verzoeken die een JSON-antwoord verwachten, wordt een HTTP-antwoord met code 422 gegenereerd

In uw UserController kunt u bijvoorbeeld een nieuwe gebruiker store in de store , die moet worden gevalideerd voordat u opslaat.

/**
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request) {
    $this->validate($request, [
        'name' => 'required',
        'email' => 'email|unique:users|max:255'
    ],
    // second array of validation messages can be passed here
    [
        'name.required' => 'Please provide a valid name!',
        'email.required' => 'Please provide a valid email!',
    ]);

    // The validation passed
}

In het bovenstaande voorbeeld, bevestigen we dat de name veld bestaat met niet-lege waarde. Ten tweede controleren we of het email mailveld een geldig e-mailformaat heeft, uniek is in de databasetabel "gebruikers" en maximaal 255 tekens lang is.

De | (pijp) karakter combineert verschillende validatieregels voor één veld.

Soms wilt u misschien stoppen met het uitvoeren van validatieregels voor een kenmerk na de eerste validatiefout. Wijs hiertoe de bail toe aan het kenmerk:

$this->validate($request, [
    'name' => 'bail|required',
    'email' => 'email|unique:users|max:255'
]);

De volledige lijst met beschikbare validatieregels is te vinden in de onderstaande parameterparameters .

Array validatie

Het valideren van matrixinvoervelden is heel eenvoudig.

Stel dat u elke naam, e-mail en vadernaam in een bepaalde array moet valideren. Je zou het volgende kunnen doen:

$validator = \Validator::make($request->all(), [
    'name.*'       => 'required', 
    'email.*'      => 'email|unique:users',
    'fatherName.*' => 'required'
]);

if ($validator->fails()) {
    return back()->withInput()->withErrors($validator->errors());
}

Laravel geeft standaardberichten voor validatie weer. Als u echter aangepaste berichten voor op array gebaseerde velden wilt, kunt u de volgende code toevoegen:

[
    'name.*' => [
        'required' => 'Name field is required',
    ],
    'email.*' => [
        'unique'   => 'Unique Email is required',
    ],
    'fatherName.*' => [
        'required' => 'Father Name required',
    ]
]

Uw uiteindelijke code ziet er als volgt uit:

$validator = \Validator::make($request->all(), [
    'name.*'       => 'required', 
    'email.*'      => 'email|unique:users',
    'fatherName.*' => 'required',
], [
    'name.*'       => 'Name Required',
    'email.*'      => 'Unique Email is required',
    'fatherName.*' => 'Father Name required',
]);

if ($validator->fails()) {
    return back()->withInput()->withErrors($validator->errors());
}

Andere validatiebenaderingen

1) Validatie van formulieraanvraag

U kunt een "formulieraanvraag" maken die de autorisatielogica, validatieregels en foutmeldingen voor een bepaald verzoek in uw toepassing kan bevatten.

De opdracht make:request Artisan CLI genereert de klasse en plaatst deze in de map app/Http/Requests :

php artisan make:request StoreBlogPostRequest

De authorize kan worden overschreven door de autorisatielogica voor dit verzoek:

public function authorize()
{        
    return $this->user()->can('post');
}

De rules methode kan worden overschreven met de specifieke regels voor deze aanvraag:

public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

De messages kan worden opgeheven met de specifieke berichten voor dit verzoek:

public function messages()
{
    return [
        'title.required' => 'A title is required',
        'title.unique' => 'There is another post with the same title',
        'title.max' => 'The title may not exceed :max characters',
        'body.required' => 'A message is required',
    ];
}

Om het verzoek te valideren, typt u gewoon de specifieke verzoekklasse op de overeenkomstige controllermethode. Als de validatie mislukt, wordt een foutreactie teruggestuurd.

public function store(StoreBlogPostRequest $request)
{
    // validation passed
}

2) Handmatig Validators aanmaken

Voor meer flexibiliteit wilt u misschien handmatig een Validator maken en de mislukte validatie direct afhandelen:

<?php    
namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                    ->withErrors($validator)
                    ->withInput();
        }

        // Store the blog post...
    }
}

2) Vloeiend regels opstellen

Af en toe moet je misschien unieke regels maken terwijl je werkt met de methode boot() binnen een serviceprovider, en vanaf Laravel 5.4 kun je vloeiend nieuwe regels maken met de klasse Rule .

Als voorbeeld gaan we werken met de UserRequest voor wanneer u een gebruiker wilt invoegen of bijwerken. Voor nu willen we een naam verplicht stellen en het e-mailadres moet uniek zijn. Het probleem met het gebruik van de unique regel is dat als u een gebruiker bewerkt, deze mogelijk dezelfde e-mail bewaart, zodat u de huidige gebruiker van de regel moet uitsluiten. Het volgende voorbeeld laat zien hoe u dit eenvoudig kunt doen door de nieuwe Rule .

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class UserRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(Request $request)
    {
        $id = $request->route()->getParameter('user');

        return [
            'name'           =>  'required',
            
            // Notice the value is an array and not a string like usual
            'email'         =>  [
                'required',
                Rule::unique('users')->ignore($id)
            ]
        ];
    }
}

Eén formulier verzoekklasse voor POST, PUT, PATCH

In navolging van het voorbeeld 'Formulierverzoekvalidatie' , kan dezelfde verzoekklasse worden gebruikt voor POST , PUT , PATCH zodat u geen andere klasse hoeft te maken met dezelfde / vergelijkbare validaties. Dit is handig als u unieke kenmerken in uw tabel hebt.

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules() {
    switch($this->method()) {
        case 'GET':
        case 'DELETE':
            return [];
        case 'POST':
            return [
                'name'     => 'required|max:75|unique',
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        case 'PUT':
        case 'PATCH':
            return [
                'name'     => 'required|max:75|unique:product,name,' . $this->product,
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        default:break;
    }
}

Beginnend vanaf de bovenkant, gaat onze schakelinstructie kijken naar het type methode van de aanvraag ( GET , DELETE , POST , PUT , PATCH ).

Afhankelijk van de methode retourneert de reeks gedefinieerde regels. Als u een veld dat is uniek hebben, zoals de name het veld in het voorbeeld, moet u een bepaalde id voor de validering te negeren opgeven.

'field_name' => 'unique:table_name,column_name,' . $idToIgnore`

Als u een primaire sleutel hebt met iets anders dan id , geeft u de kolom met de primaire sleutel op als vierde parameter.

'field_name' => 'unique:table_name,column_name,' . $idToIgnore . ',primary_key_column'

In dit voorbeeld gebruiken we PUT en geven we de waarde van de product-id door aan de route ( admin/products/{product} ). Dus $this->product is gelijk aan het te negeren id .

Nu hoeven uw PUT|PATCH en POST validatieregels niet hetzelfde te zijn. Definieer uw logica die aan uw eisen voldoet. Met deze techniek kunt u de aangepaste berichten die u mogelijk hebt gedefinieerd binnen de aangepaste formulieraanvraagklasse opnieuw gebruiken.

Foutmeldingen

Foutmeldingen aanpassen

De bestanden / /resources/lang/[lang]/validation.php validation.php bevatten de foutmeldingen die door de validator moeten worden gebruikt. U kunt ze indien nodig bewerken.

De meeste van hen hebben tijdelijke aanduidingen die automatisch worden vervangen bij het genereren van het foutbericht.

In 'required' => 'The :attribute field is required.' , zal de :attribute placeholder van het :attribute worden vervangen door de veldnaam (u kunt ook de weergavewaarde van elk veld in de attributes in hetzelfde bestand aanpassen).

Voorbeeld

bericht configuratie:

'required' => 'Please inform your :attribute.',
//...
'attributes => [
    'email' => 'E-Mail address'
]

reglement:

`email' => `required`

resulterende foutmelding:

"Geef uw e-mailadres door."


Foutmeldingen aanpassen binnen een verzoekklasse

De klasse Request heeft toegang tot een methode messages() die een array zou moeten retourneren, dit kan worden gebruikt om berichten te negeren zonder in de lang-bestanden te hoeven gaan. Als we bijvoorbeeld een aangepaste file_exists validatie hebben, kunt u berichten zoals hieronder gebruiken.

class SampleRequest extends Request {

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'image' =>  'required|file_exists'
        ];
    }

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    public function messages()
    {
        return [
            'image.file_exists' =>  'That file no longer exists or is invalid'
        ];
    }

}

Foutmeldingen weergeven

De validatiefouten worden naar de sessie geflitst en zijn ook beschikbaar in de variabele $errors , die automatisch wordt gedeeld met alle views.

Voorbeeld van het weergeven van de fouten in een Blade-weergave:

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Aangepaste validatieregels

Als u een aangepaste validatieregel wilt maken, kunt u dit bijvoorbeeld doen in de boot van een serviceprovider, via de Validator-gevel.

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Validator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('starts_with', function($attribute, $value, $parameters, $validator) {
            return \Illuminate\Support\Str::startsWith($value, $parameters[0]);
        });

        Validator::replacer('starts_with', function($message, $attribute, $rule, $parameters) {
            return str_replace(':needle', $parameters[0], $message);
        });
    }
}

De extend heeft een string nodig die de naam van de regel zal zijn en een functie die op zijn beurt de naam van het attribuut, de waarde die wordt gevalideerd, een array van de regelparameters en de validatorinstantie wordt doorgegeven en moet teruggeven of de validatie is geslaagd. In dit voorbeeld controleren we of de waardereeks begint met een gegeven substring.

Het foutbericht voor deze aangepaste regel kan zoals gebruikelijk worden ingesteld in het bestand / /resources/lang/[lang]/validation.php

'starts_with' => 'The :attribute must start with :needle.'

De replacer neemt een tekenreeks die de naam van de regel is en een functie die op zijn beurt het oorspronkelijke bericht (vóór vervanging), de naam van het kenmerk, de naam van de regel en een reeks regelparameters doorgeeft, en moet het bericht retourneren na het vervangen van de tijdelijke aanduidingen indien nodig.

Gebruik deze regel als elke andere:

$this->validate($request, [
    'phone_number' => 'required|starts_with:+'
]);


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow