Quasar Framework предоставляет мощные инструменты для организации валидации данных как на клиентской стороне, так и на серверной. Использование валидации критично для обеспечения корректности данных, безопасности приложения и улучшения пользовательского опыта. Разделение валидации на клиентскую и серверную позволяет добиться гибкости и надежности.
Клиентская валидация выполняется прямо в браузере пользователя до отправки данных на сервер. Она обеспечивает моментальный отклик интерфейса и сокращает количество лишних запросов.
QForm и
rulesВ Quasar для работы с формами применяется компонент
QForm. Основной механизм валидации реализован через
массив rules, который можно задавать для компонентов
ввода (QInput, QSelect, QDate, и
др.).
Пример:
<template>
<q-form ref="form" @submit.prevent="submitForm">
<q-input
v-model="email"
label="Email"
:rules="[emailRule, requiredRule]"
/>
<q-btn type="submit" label="Отправить" color="primary" />
</q-form>
</template>
<script>
export default {
data() {
return {
email: '',
requiredRule: val => !!val || 'Поле обязательно для заполнения',
emailRule: val => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val) || 'Некорректный email'
};
},
methods: {
submitForm() {
if (this.$refs.form.validate()) {
console.log('Форма валидна');
}
}
}
};
</script>
Ключевые моменты:
rules — массив функций, возвращающих либо
true (если поле валидно), либо строку с сообщением об
ошибке.validate().QForm позволяет легко проверять состояние всей формы
через this.$refs.form.validate().Иногда необходимо проверять данные на стороне клиента с обращением к серверу, например, уникальность логина или email. Quasar поддерживает асинхронные правила:
usernameRule: async val => {
if (!val) return 'Поле обязательно';
const response = await fetch(`/api/check-username?username=${val}`);
const data = await response.json();
return data.available || 'Имя пользователя занято';
}
Особенности:
true, либо
строку с ошибкой.rules.Серверная валидация выполняется после получения данных на бэкенде. Она критически важна для защиты приложения от некорректных или злонамеренных данных, даже если клиентская валидация присутствует.
Пример ответа сервера в формате JSON:
{
"status": "error",
"errors": {
"email": "Email уже используется",
"password": "Пароль слишком короткий"
}
}
Quasar позволяет обрабатывать серверные ошибки в форме:
submitForm() {
axios.post('/api/register', { email: this.email, password: this.password })
.then(() => {
console.log('Регистрация успешна');
})
.catch(err => {
if (err.response && err.response.data.errors) {
const errors = err.response.data.errors;
this.$refs.form.setErrors(errors);
}
});
}
Особенности метода setErrors:
На практике рекомендуется комбинировать оба уровня валидации:
Пример полной схемы:
Такой подход обеспечивает надежность, удобство для пользователя и предотвращает ошибки данных.
computed или watch для
динамического включения правил валидации.Клиентская и серверная валидация в Quasar являются взаимодополняющими инструментами, обеспечивая комплексную защиту данных и улучшенный пользовательский опыт.