Form validation
rule
model-form uses lavel’s validation rules to validate data submitted by the form
$form->text('title')->rules('required|min:3');// Complex validation rules can be implemented inside callbacks$form->text('title')->rules(function (Form $form) {// Add field unique validation if not edit statusif (!$id = $form->model()->id) {return 'unique:users,email_address';}});
Custom error messages can also be given for validation rules:
$form->text('code')->rules('required|regex:/^\d+$/|min:10', ['regex' => 'The code must be all numeric','min' => 'Code cannot be less than 10 characters',]);
If you want to allow the field to be empty, first set the field to NULL in the database table, then
$form->text('title')->rules('nullable');
See Validation for more rules.
creationRules
This method is exactly the same as Form\Field::rule, except that it only works when data is added.
{tip} If the
creationRulesmethod is called, the validation rules set by therulemethod will be ignored.
updateRules
This method is exactly the same as Form\Field::rule, except that it only works when you update the data.
{tip} If the
updateRulesmethod is called, the validation rules set by therulemethod will be ignored.
responseValidationMessages
Custom validation error messages can be returned and subsequent logic interrupted by the Form::responseValidationMessages method, used as follows:
// "PUT" method for editing submissionsif (request()->getMethod() == 'PUT') {if (...) { // Your validation logic$form->responseValidationMessages('title', 'Wrong title format');// If there are multiple error messages, the second parameter can be passed as an array.$form->responseValidationMessages('content', ['content format error', 'content cannot be empty']);}}$form->text('title');$form->text('content');
You can also use this method in the submitted event
$form->submitted(function ($form) {if (...) { // Your validation logic$form->responseValidationMessages('title', 'Incorrect title format');// If there are multiple error messages, the second parameter can be passed as an array$form->responseValidationMessages('content', ['content format error', 'content cannot be empty']);}});
Front-end verification
The system inherits bootstrap-validator for front-end form validation and supports validation of H5 form types.
{tip} Browsers that don’t support H5 can also use front-end validation, and the system has been made compatible. Most forms support both front-end and back-end validation, both can work at the same time without conflict, a few forms front-end validation is invalid.
H5 verification
required
mandatory fields
$form->text('title')->required();
number
Only numbers are allowed
$form->text('age')->type('number');
limits
// Only numbers in the range of 10-60 are allowed.$form->text('age')->type('number')->attribute('min', 10)->attribute('max', 60);
email address
$form->email('email');
url
links
$form->text('website')->type('url');
Other
minLength
Limit minimum character length
$form->text('title')->minLength(20);// Setting error messages$form->text('title')->minLength(20, 'Minimum of 20 characters');
maxLength
Limit the maximum length of characters
$form->text('title')->maxLength(50);// Setting error messages$form->text('title')->maxLength(50, 'No more than 50 characters.');
same
Limits the value of the current field to be equal to the value of the given field.
$form->password('password');$form->password('password_confirm')->same('password');// Setting error messages$form->password('password_confirm')->same('password', 'Two inconsistent password entries');
Custom
Developers can customize front-end validation rules in the following ways
Add the following code to app/Admin/bootstrap.php.
use Dcat\Admin\Form\Field;Field\Text::macro('len', function (int $length, ?string $error = null) {// Extensions to the front-end verification logicAdmin::script(<<<'JS'Dcat.validator.extend('len', function ($el) {return $el.val().length != $el.attr('data-len');});JS);// Also add back-end verification logic, depending on the need$this->rules('size:'.$length);return $this->attribute(['data-len' => $length,'data-len-error' => str_replace([':attribute', ':len'],[$this->label, $length],$error ?: "Only :len characters can be entered."),]);});
use
$form->text('name')->len(10);
