РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗ppinSpFmPc 53 of 112 menu
◀ ▶

Прекогниция в Inertia

Давайте выясним, как проверять поле сразу после правки, не дожидаясь нажатия «Save». Правила остаются на сервере, а клиент лишь запрашивает вердикт по одному имени поля, когда человек его изменил.

У хелпера прекогницию включают цепочкой withPrecognition с методом и адресом, куда уйдут те же данные, что и при сохранении. Затем вызывают validate с именем поля, обычно из обработчика change. Сообщение попадает в form.errors, а признак invalid подсказывает, есть ли ошибка у поля. На стороне Laravel для таких запросов к маршруту нужен посредник прекогниции.

Давайте подключим посредник к маршруту сохранения:

<?php use App\Http\Requests\StorePostRequest; use Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests; use Illuminate\Support\Facades\Route; use Inertia\Inertia; Route::get('/posts/create', function () { return Inertia::render('Posts/Create'); }); Route::post('/posts', function (StorePostRequest $request) { return back(); })->middleware([HandlePrecognitiveRequests::class]); ?>

Давайте опишем правила в form request:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StorePostRequest extends FormRequest { public function rules(): array { return [ 'title' => 'required|string', ]; } } ?>

Давайте включим прекогницию и проверим заголовок по изменению:

<script setup> import { useForm } from '@inertiajs/vue3' const form = useForm({ title: '', }).withPrecognition('post', '/posts') function submit() { form.submit() } </script> <template> <form @submit.prevent="submit"> <input type="text" v-model="form.title" @change="form.validate('title')" /> <p v-if="form.invalid('title')"> {{ form.errors.title }} </p> <button type="submit">Save</button> </form> </template>

Сделайте форму работника Vera так, чтобы пустое имя подсвечивалось сразу после изменения поля, ещё до отправки формы.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить