Szukaj…
Parametry
Parametr | Detale |
---|---|
wymagany | To pole jest wymagane |
czasami | Uruchom sprawdzanie poprawności dla pola tylko wtedy, gdy to pole jest obecne w tablicy wejściowej |
Dane wejściowe to prawidłowy adres e-mail | |
maksymalna wartość | Wartość wejściowa powinna być poniżej wartości maksymalnej |
unikalny: nazwa_tabeli_db | Wartość wejściowa powinna być unikalna w podanej nazwie tabeli bazy danych |
przyjęty | Tak / Włączone / 1 prawda, przydatne do sprawdzania warunków |
active_url | Musi być prawidłowym adresem URL zgodnie z checkdnsrr |
po : dacie | Walidowane pole musi podać wartość po podanej dacie |
alfa | Walidowane pole musi być całkowicie alfabetyczne. |
alpha_dash | Walidowane pole może zawierać znaki alfanumeryczne, a także myślniki i podkreślenia. |
alpha_num | Walidowane pole musi składać się całkowicie ze znaków alfanumerycznych. |
szyk | Musi być tablicą PHP |
przed : data | Pole musi być wartością poniżej podanej daty |
pomiędzy: min., maks | Wartość wejściowa powinna zawierać się pomiędzy wartością minimalną (min) i maksymalną (maks.) |
boolean | Walidowane pole musi być możliwe do przesłania jako wartość logiczną. Akceptowane dane wejściowe to true , false , 1 , 0 , "1" i "0" . |
Potwierdzony | foo_confirmation pole musi mieć pasujące pole foo_confirmation . Na przykład, jeśli pole pod walidacji jest password , pasujący password_confirmation pole musi być obecny na wejściu. |
data | Walidowane pole musi być poprawną datą zgodnie z funkcją strtotime PHP. |
liczba całkowita | Walidowane pole musi być liczbą całkowitą |
strunowy | Walidowane pole musi być ciągiem znaków . |
Podstawowy przykład
Możesz zweryfikować dane żądania, używając metody validate
(dostępnej w podstawowym kontrolerze, dostarczonej przez cechę ValidatesRequests
).
Jeśli reguły przejdą pomyślnie, Twój kod będzie działał normalnie; jeśli jednak sprawdzanie poprawności się nie powiedzie, odpowiedź błędu zawierająca błędy sprawdzania poprawności zostanie automatycznie odesłana:
- w przypadku typowych formularzy HTML użytkownik zostanie przekierowany na poprzednią stronę, przy czym formularz zachowa przesłane wartości
- dla żądań oczekujących odpowiedzi JSON zostanie wygenerowana odpowiedź HTTP z kodem 422
Na przykład w UserController
możesz zapisywać nowego użytkownika w metodzie store
, który przed zapisaniem wymagałby sprawdzenia.
/**
* @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
}
W powyższym przykładzie potwierdzamy, że pole name
istnieje z niepustą wartością. Po drugie, należy sprawdzić, czy email
pole ma poprawny format e-mail, jest unikalny w tabeli bazy danych „użytkowników”, i ma maksymalną długość 255 znaków.
The
|
Znak (potok) łączy różne reguły sprawdzania poprawności dla jednego pola.
Czasami możesz chcieć zatrzymać reguły sprawdzania poprawności dla atrybutu po pierwszym niepowodzeniu sprawdzania poprawności. W tym celu przypisz regułę bail
do atrybutu:
$this->validate($request, [
'name' => 'bail|required',
'email' => 'email|unique:users|max:255'
]);
Pełna lista dostępnych reguł sprawdzania poprawności znajduje się w sekcji parametrów poniżej .
Sprawdzanie poprawności macierzy
Sprawdzanie poprawności pól wejściowych formularza tablicowego jest bardzo proste.
Załóżmy, że musisz zweryfikować każde imię, adres e-mail i nazwisko ojca w danej tablicy. Możesz wykonać następujące czynności:
$validator = \Validator::make($request->all(), [
'name.*' => 'required',
'email.*' => 'email|unique:users',
'fatherName.*' => 'required'
]);
if ($validator->fails()) {
return back()->withInput()->withErrors($validator->errors());
}
Laravel wyświetla domyślne komunikaty do weryfikacji. Jeśli jednak chcesz niestandardowe komunikaty dla pól opartych na tablicach, możesz dodać następujący kod:
[
'name.*' => [
'required' => 'Name field is required',
],
'email.*' => [
'unique' => 'Unique Email is required',
],
'fatherName.*' => [
'required' => 'Father Name required',
]
]
Twój końcowy kod będzie wyglądał następująco:
$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());
}
Inne metody walidacji
1) Sprawdzanie poprawności formularza
Możesz utworzyć „formularz wniosku”, który może zawierać logikę autoryzacji, reguły sprawdzania poprawności i komunikaty o błędach dla konkretnego żądania w aplikacji.
Komenda make:request
Artisan CLI generuje klasę i umieszcza ją w katalogu app/Http/Requests
:
php artisan make:request StoreBlogPostRequest
Metodę authorize
można zastąpić logiką autoryzacji dla tego żądania:
public function authorize()
{
return $this->user()->can('post');
}
Metodę rules
można zastąpić szczegółowymi regułami dla tego żądania:
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
Metodę messages
można zastąpić konkretnymi komunikatami dla tego żądania:
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',
];
}
Aby zweryfikować żądanie, po prostu wpisz wskazówkę dotyczącą konkretnej klasy żądania w odpowiedniej metodzie kontrolera. Jeśli sprawdzanie poprawności się nie powiedzie, odpowiedź błędu zostanie odesłana.
public function store(StoreBlogPostRequest $request)
{
// validation passed
}
2) Ręczne tworzenie walidatorów
Aby uzyskać większą elastyczność, możesz ręcznie utworzyć walidator i bezpośrednio obsłużyć nieudaną weryfikację:
<?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) Płynne tworzenie reguł
Czasami może być konieczne tworzenie unikalnych reguł w locie, praca z metodą boot()
w ramach dostawcy usług może być nadrzędna, ponieważ w Laravel 5.4 możesz płynnie tworzyć nowe reguły za pomocą klasy Rule
.
Jako przykład będziemy pracować z UserRequest
gdy chcesz wstawić lub zaktualizować użytkownika. Na razie chcemy, aby nazwa była wymagana, a adres e-mail musi być unikalny. Problem z używaniem unique
reguły polega na tym, że jeśli edytujesz użytkownika, może on przechowywać ten sam adres e-mail, więc musisz wykluczyć bieżącego użytkownika z reguły. Poniższy przykład pokazuje, jak łatwo to zrobić, korzystając z nowej klasy 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)
]
];
}
}
Klasa pojedynczego formularza dla POST, PUT, PATCH
Zgodnie z przykładem „Walidacja żądania formularza” ta sama klasa żądania może być używana dla POST
, PUT
, PATCH
więc nie trzeba tworzyć innej klasy przy użyciu tych samych / podobnych walidacji. Jest to przydatne, jeśli masz unikalne atrybuty w tabeli.
/**
* 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;
}
}
Począwszy od góry, nasza instrukcja switch będzie analizować typ metody żądania ( GET
, DELETE
, POST
, PUT
, PATCH
).
W zależności od metody zwróci tablicę zdefiniowanych reguł. Jeśli masz unikalne pole, takie jak pole name
w przykładzie, musisz podać konkretny identyfikator, aby sprawdzanie poprawności miało zostać zignorowane.
'field_name' => 'unique:table_name,column_name,' . $idToIgnore`
Jeśli masz klucz podstawowy oznaczony czymś innym niż id
, jako kolumnę czwartego parametru określisz kolumnę klucza podstawowego.
'field_name' => 'unique:table_name,column_name,' . $idToIgnore . ',primary_key_column'
W tym przykładzie używamy PUT
i przekazujemy do trasy ( admin/products/{product}
) wartość identyfikatora produktu. Więc $this->product
będzie równy id
do zignorowania.
Teraz Twoje reguły sprawdzania poprawności PUT|PATCH
i POST
nie muszą być takie same. Zdefiniuj swoją logikę, która odpowiada Twoim wymaganiom. Ta technika umożliwia ponowne użycie niestandardowych wiadomości, które zostały zdefiniowane w niestandardowej klasie żądania formularza.
Komunikaty o błędach
Dostosowywanie komunikatów o błędach
Pliki /resources/lang/[lang]/validation.php
zawierają komunikaty o błędach do wykorzystania przez moduł sprawdzający poprawność. Możesz je edytować w razie potrzeby.
Większość z nich ma symbole zastępcze, które zostaną automatycznie zastąpione podczas generowania komunikatu o błędzie.
Na przykład w 'required' => 'The :attribute field is required.'
, symbol zastępczy :attribute
zostanie zastąpiony nazwą pola (alternatywnie można również dostosować wartość wyświetlaną każdego pola w tablicy attributes
w tym samym pliku).
Przykład
konfiguracja wiadomości:
'required' => 'Please inform your :attribute.',
//...
'attributes => [
'email' => 'E-Mail address'
]
zasady:
`email' => `required`
wynikowy komunikat o błędzie:
„Proszę podać swój adres e-mail”.
Dostosowywanie komunikatów o błędach w klasie żądania
Klasa Request ma dostęp do metody messages()
, która powinna zwrócić tablicę, można jej użyć do przesłonięcia wiadomości bez konieczności przechodzenia do plików lang. Na przykład, jeśli mamy niestandardową weryfikację file_exists
możesz wysyłać wiadomości takie jak poniżej.
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'
];
}
}
Wyświetlanie komunikatów o błędach
Błędy sprawdzania poprawności są rzutowane na sesję i są również dostępne w zmiennej $errors
, która jest automatycznie udostępniana wszystkim widokom.
Przykład wyświetlania błędów w widoku ostrza:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Niestandardowe reguły sprawdzania poprawności
Jeśli chcesz utworzyć niestandardową regułę sprawdzania poprawności, możesz to zrobić na przykład w metodzie boot
usługodawcy za pośrednictwem fasady Validatora.
<?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);
});
}
}
Metoda extend
pobiera ciąg znaków, który będzie nazwą reguły i funkcją, która z kolei przekaże nazwę atrybutu, sprawdzanej wartości, tablicę parametrów reguły i instancję sprawdzania poprawności i powinna zwrócić, czy walidacja mija. W tym przykładzie sprawdzamy, czy ciąg wartości zaczyna się od danego podłańcucha.
Komunikat o błędzie dla tej reguły niestandardowej można ustawić jak zwykle w pliku /resources/lang/[lang]/validation.php
i może on zawierać symbole zastępcze, na przykład dla wartości parametrów:
'starts_with' => 'The :attribute must start with :needle.'
Metoda replacer
pobiera ciąg znaków, który jest nazwą reguły i funkcją, która z kolei przekaże oryginalną wiadomość (przed zastąpieniem), nazwę atrybutu, nazwę reguły i tablicę parametrów reguły, i powinien zwrócić wiadomość po wymianie symboli zastępczych w razie potrzeby.
Użyj tej reguły jak każdej innej:
$this->validate($request, [
'phone_number' => 'required|starts_with:+'
]);