Я довольно новичок в Laravel, но я уже читал о проверке и Laravel Collective .Я считаю, что эти методы довольно громоздки, потому что проверка происходит на разных уровнях:
- Проверка в базе данных (ограничение внешнего ключа, типы столбцов)
- Проверка в модели (через
set...Attribute
методы) - Проверка по признаку запроса
- Проверка по внешнему интерфейсу (например, Bootstrap )
Например, Iхотел бы написать форму с селектором страны.В моей базе данных есть столбец VARCHAR(2)
для получения кода страны.Я должен написать метод setCountryAttribute
в моей модели, чтобы сравнить его с принятыми странами.Затем я должен написать запрос формы php artisan make:request StoreCustomerPost
, который является частичной копией кода setCountryAttribute
.В конце концов мне нужно написать немного JavaScript для проверки на стороне клиента.
Делать это для каждой области каждой формы большого приложения просто недопустимо.
То, что я ищу, - это более оптимизированное решение, которое включает в себя метапрограммирование.Например, я могу использовать фабрику наборов инструментов, которая может генерировать весь внешний HTML, включая код проверки JS, проверку запроса и проверку модели.
Давайте рассмотрим пример поля формы age
.Я думаю, что это можно определить следующим образом:
"age": {
"type": "textfield",
"name": "age",
"validation": {
"type": "integer"
"pattern": "/\d{1,2}|1\d{2}/",
"minValue": 0,
"maxValue": 122,
},
"view": {
"template": "form.fields.textfield",
"placeholder": "Age",
"size": "10em",
"title": "Age",
"validation": true
}
}
Этой информации достаточно для динамического генерирования:
- Проверка модели
setAgeAttribute
, возможно, с помощью более общего setAttribute
метода черты. - Запрос валидатора подключен к моему контроллеру
- Код внешнего интерфейса.
Так что в моем контроллере я ожидаю что-то вроде:
public function edit($id) {
$form = Form::fill(Customer::find($id))
->field('age');
->field('firstname');
->field('lastname');
return view('customers.edit', ['form' => $form->toBlade()]);
}
Есть ли решение, достаточно близкое к этому предложению?