Я новичок в Laravel, но уже читал про Проверка и Коллектив Ларавеля. Я считаю эти методы довольно громоздкими, потому что проверка происходит на разных уровнях:
set...Attribute)Например, я хотел бы написать форму с выбором страны. В моей базе данных есть столбец 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()]);
}
Это все? github.com/kristijanhusak/laravel-форм-билдер



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


What I am looking for is a more optimized solution which involves meta-programming. For instance, I may use a toolbox factory that can generate all the fronend HTML including the JS validation code, the Request validation, and the Model validation.
Я чувствую вашу боль :-) Хотя вопрос немного широк, потому что на него нелегко ответить, если есть где-то такой инструмент, который вы описываете. По крайней мере, я могу сказать, что никогда не видел и не слышал об этом для Laravel.
До того, как я использовал Laravel, я работал над большим проектом с MeteorJS, и у них есть потрясающий Коллекция 2 пакет, которого мне очень не хватает в Laravel. Но я думаю, что с этим проще справиться, если вам нужно иметь дело только с одним языком для бэкенда и интерфейса, чем с двумя.
Так что я бы сказал, что вы должны делать все это самостоятельно, но с нетерпением жду вас, если кто-нибудь придумает какой-нибудь скрытый драгоценный камень :-)
Сначала несколько мыслей:
не все функции PHP, используемые при проверке, имеют аналоги в Javascript и наоборот. Даже регулярное выражение не ведет себя одинаково на обоих языках. Проверьте regex101 на тонкие различия.
Вы можете просто использовать вызовы xhr (ajax) для проверки laravel, однако я согласен, что лучше всего предотвратить ненужные вызовы на сервер с проверкой клиента.
мы могли бы создать собственную библиотеку, которая пытается отразить текущие возможности проверки Laravel для js.
В ближайшее время появится метод под названием webassembly, который может позволить использовать PHP в браузере, и таким образом создайте более совместимую проверку внешнего интерфейса. Конечно, этот язык внешнего интерфейса по-прежнему связан с ограничениями API браузера.
Это интересная и распространенная проблема. Меня тоже раздражает, что у каждой библиотеки есть собственный код проверки. Вы можете создать общий класс, который проверяет этот объект и использовать его в js, моделях и так далее. например: пользовательский класс имеет свойство $validations = ... и проверку метода. Вы можете передать этот общий объект всем классам и сгенерировать код javascript на их основе. Я не знаю, есть ли библиотека для проверки js точно. Вы можете создать свой собственный или использовать существующий, но, возможно, адаптируете свои правила в соответствии со структурой правил библиотеки js.