Этот вопрос проверяет понимание принципов валидации в веб-приложениях и умение правильно распределять проверки данных между различными слоями приложения.
Валидация должна находиться на уровне Form Request в Laravel для проверки входящих HTTP-данных. Дополнительная бизнес-валидация может находиться в сервисном слое или моделях. Клиентская валидация полезна для UX, но никогда не заменяет серверную. База данных обеспечивает финальный уровень защиты через constraints.
Валидация данных должна быть распределена между несколькими уровнями приложения, каждый из которых отвечает за свой тип проверок.
HTML5 атрибуты (required, type, pattern)
JavaScript проверки
Назначение: Улучшение UX, быстрая обратная связь
<input type="email" name="email" required minlength="5">Проверка структуры и формата данных
Авторизация запроса
Назначение: Защита от некорректных HTTP-запросов
class CreateUserRequest extends FormRequest {
public function rules() {
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed',
];
}
}Проверка бизнес-правил
Сложные условия, зависящие от состояния системы
Назначение: Обеспечение целостности бизнес-процессов
class OrderService {
public function createOrder(array $data) {
// Проверка бизнес-правил
if (!$this->inventoryService->hasStock($data['product_id'])) {
throw new OutOfStockException('Product out of stock');
}
if ($this->userService->hasUnpaidOrders($data['user_id'])) {
throw new BusinessRuleException('User has unpaid orders');
}
// Создание заказа
return $this->orderRepository->create($data);
}
}Мутаторы и аксессоры
События модели (creating, updating)
Назначение: Поддержание целостности данных на уровне ORM
class User extends Model {
public function setEmailAttribute($value) {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException('Invalid email format');
}
$this->attributes['email'] = strtolower($value);
}
}UNIQUE constraints
FOREIGN KEY constraints
CHECK constraints
Назначение: Гарантия целостности данных на самом низком уровне
Проверку наличия обязательных полей
Проверку формата данных (email, date, numeric)
Простые проверки уникальности
Валидацию файлов
Сложные бизнес-правила
Проверки, требующие запросов к базе данных
Условную логику валидации
Гарантию ссылочной целостности
Уникальность данных
Валидацию типов данных
Правильное распределение валидации между Form Request, сервисами и базой данных создает надежную систему проверок, где каждый уровень обеспечивает свою часть безопасности и целостности данных.