System walidacji DBM
Dokumentacja jest stale rozwijana i aktualizowana wraz z postępem projektu. Ponieważ powstaje ona równolegle z kodem, niektóre sekcje mogą tymczasowo odnosić się do wcześniejszych wersji systemu - są one sukcesywnie dostosowywane do bieżącego stanu aplikacji. Jeśli zauważysz nieaktualne informacje, zgłoś to lub załóż Issue / Pull Request.
Dokumentacja
# System walidacji DBM
# Przegląd
Klasa Validator zapewnia elastyczny i rozszerzalny sposób walidacji danych w formularzu.
# Funkcje
- System walidacji oparty na regułach
- Niestandardowe reguły walidacji
- Obsługa ochrony CSRF
- Obsługa tłumaczeń (wielojęzycznych)
- Znormalizowane wyjście błędów (przyjazne dla API)
- Możliwość rozszerzenia poprzez dziedziczenie
# Podstawowe użycie
# Bez tłumaczenia
use Dbm\Validation\Validator;
$validator = new Validator();
$errors = $validator->rules([
'email' => ['required', 'email'],
], $data);
# Z tłumaczeniem
$validator = new Validator($translation);
$errors = $validator->rules($rules, $data);
# Przebieg walidacji
- Zdefiniuj reguły
- Przekaż dane wejściowe
- Walidacja przechodzi przez każdą regułę
- Zbieranie i zwracanie błędów
$errors = $validator->rules($rules, $data);
if ($validator->isValid()) {
// powodzenie
}
# Dostępne reguły walidacji
# Wymagane
'required'
Pole nie może być puste.
# Ciąg znaków
'string'
Wartość musi być ciągiem znaków.
# Minimalna długość
'min:3'
Minimalna liczba znaków.
# Maksymalna długość
'max:255'
Maksymalna liczba znaków.
# Adres e-mail
'email'
Prawidłowy format adresu e-mail.
# Adres URL
'url'
Prawidłowy format adresu URL.
# Telefon
'telefon'
Obsługuje formaty takie jak:
123 123 123+48 123 123 123
# Litery i spacje
'litery_spacje'
Dopuszcza tylko:
- litery
- spacje
'i-
# Hasło
'hasło'
Wymagania:
- 8–30 znaków
- co najmniej jedna mała litera
- jedna wielka litera
- jedna cyfra
- jeden znak specjalny
# Potwierdzono
'potwierdzono'
Sprawdza, czy wartość pasuje do:
{field}_confirmation{field}_repeat
# Wyrażenie regularne
'regex:/pattern/'
Walidacja niestandardowego wyrażenia regularnego.
# CSRF
'csrf'
Wymaga najpierw zarejestrowania reguły CSRF.
# Ochrona przed CSRF
# Rejestracja reguły CSRF
$validator->registerCsrfRule($csrfManager);
# Użycie
'form_csrf' => ['required', 'csrf']
# Reguły niestandardowe
Możesz zdefiniować własne reguły walidacji:
$validator->addRule('alpha_dash', function ($field, $value) {
return preg_match('/^[A-Za-z0-9_-]+$/', $value)
? null
: 'Nieprawidłowy format';
});
# Obsługa błędów
# Domyślny format błędu
[
'error_email' => 'Pole adresu e-mail jest wymagane.'
]
# Znormalizowane błędy (przyjazne dla API)
$validator->getNormalizedErrors();
Dane wyjściowe:
[
'email' => 'Pole e-mail jest wymagane.'
]
# Obsługa tłumaczeń
# Przykład pliku z tłumaczeniem
return [
'validation.required' => 'Pole :field jest wymagane.',
'validation.email' => 'Pole :field musi zawierać prawidłowy adres e-mail.',
];
# Konfiguracja
Ustaw dostępne języki w .env:
APP_LANGUAGES=en,pl
# Zastępowanie symboli zastępczych
Obsługiwane symbole zastępcze:
:field:value
Przykład:
'validation.min' => 'Pole :field musi mieć co najmniej :value znaków.'
# Rozszerzanie walidatora (zalecane podejście)
Utwórz walidator specyficzny dla formularza:
class UserForm extends Validator
{
public function validate(array $data): array
{
$this->rules([
'email' => ['required', 'email'],
], $data);
return $this->getErrors();
}
}
# Zaawansowany przykład (przypadek rzeczywisty)
# PanelUserForm
$form = new PanelUserForm($repository, $csrf, $translation);
$errors = $form->validateCreate($_POST);
# Prezentowane funkcje
- Reguły walidacji bazy
- Walidacja warunkowa (tworzenie vs. aktualizacja)
- Potwierdzenie hasła
- Sprawdzanie unikalności bazy danych
- Walidacja CSRF
# Walidacja warunkowa
Przykład z rzeczywistego użycia:
if (!$id) {
// logika tworzenia
}
if ($id && $password) {
// logika aktualizacji
}
# Normalizacja danych
Opcjonalne przetwarzanie wstępne:
$data = $this->normalize($data);
Usuwa zbędne spacje z ciągów znaków.
# Architektura wewnętrzna
# Kluczowe metody
| Metoda | Opis |
|---|---|
rules() | Uruchamia walidację |
applyRule() | Stosuje pojedynczą regułę |
registerError() | Przechowuje błąd |
addRule() | Dodaje niestandardową regułę |
trans() | Obsługuje tłumaczenia |
# Najlepsze praktyki
- Zawsze waliduj dane wejściowe przed przetworzeniem
- Używaj
normalizedErrors()dla odpowiedzi API - Zachowaj logikę walidacji w klasach formularzy
- Używaj systemu tłumaczeń dla błędów widocznych dla użytkownika
- Oddziel logikę biznesową od walidacji
# Podsumowanie
System walidacji DBM jest:
- Lekki
- Rozszerzalny
- Gotowy na tłumaczenia
- Przyjazny dla API
- Niezależny od frameworka
Idealny dla:
- prostych formularzy
- złożonych paneli administracyjnych