# Walidacja
Do walidacji formularzy używana jest biblioteka VeeValidate (opens new window), która obsługuję złożone walidacje w łatwy sposób. Wspiera walidację synchroniczną i asynchroniczną. Przykład użycia razem z Quasarem (opens new window)
TIP
Core używa również biblioteki yup (opens new window). Biblioteka ta oferuje gotowe reguły, które można użyć do walidacji. VeeValidate posiada wbudowaną obsługę schematów yup.
# Przykład użycia
Żeby skorzystać z walidacji na formularzu zalecane jest używanie bazowych komponentów z modułu core tj. BaseForm, VInput, VSelect itd. Komponenty te dostosowane są pod pakiet VeeValidate.
<script setup>
import { useQuasar } from "quasar";
import { useForm } from "vee-validate";
import { object, string } from "yup";
const props = defineProps({
alias: {
type: String,
default: "employee.employees",
},
currentValues: {
type: Object,
default: null,
},
onSubmit: {
type: Function,
default: () => {},
},
});
const { loading } = useQuasar();
const { handleSubmit, resetForm } = useForm({
initialValues: getInitialValues(),
validationSchema: object({
first_name: string().required().label("labels.first_name"),
last_name: string().required().label("labels.last_name"),
}),
});
watch(
() => props.currentValues,
(value) => {
if (value) {
resetForm({
values: getInitialValues(value),
});
}
}
);
const handleFormSubmission = handleSubmit(async (values, { setErrors }) => {
try {
loading.show();
await props.onSubmit(values);
} catch (error) {
setErrors(getFormValidationErrors(error));
} finally {
loading.hide();
}
}, onFormInvalidSubmit);
function getInitialValues(data) {
const initialValues = {
first_name: "",
last_name: "",
};
const _values = props.currentValues || data;
if (_values) {
return getFormFields(_values, initialValues);
}
return initialValues;
}
</script>
<template>
<base-form>
<div class="row q-col-gutter-md">
<v-input
class="col-sm-3 col-xs-12"
name="first_name"
:label="$t('labels.first_name')"
/>
<v-input
class="col-sm-3 col-xs-12"
name="last_name"
:label="$t('labels.last_name')"
/>
</div>
<base-form-btn-group
@submit="handleFormSubmission"
@cancel="$router.push({ name: `${alias}.index` })"
/>
</base-form>
</template>
Funkcja label w validationSchema przyjmuje jeden argument, może on być następujących typów:
- string (klucz tłumaczenia)
- obiekt
- tablica
Finalnie argument ten przekazywany jest do funkcji t (opens new window).