Успех запроса в Inertia
Давайте теперь после сохранения
поста нужно один раз записать
в журнал на клиенте, что ответ
пришёл без ошибок проверки.
Делать это в колбэке каждой
формы долго, а часть переходов
идёт только через Link.
Событие success вызывается
при удачном визите на страницу,
если Laravel не вернул ошибки
проверки в пропсах. Оно не
срабатывает при восстановлении
экрана из истории браузера
без нового запроса - для смены
адреса в таких случаях есть
отдельное событие navigate.
В обработчике доступен объект
страницы с текущим адресом.
Давайте примем заголовок и вернём на форму:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::get('/posts/create', function () {
return Inertia::render('Posts/Create');
});
Route::post('/posts', function (Request $request) {
$request->validate([
'title' => 'required',
]);
return back();
});
?>
Давайте накопим короткие записи
журнала в общем массиве
и подпишемся на success:
import { router } from '@inertiajs/vue3'
import { ref } from 'vue'
export const visitLog = ref([])
router.on('success', (event) => {
visitLog.value.push(
'OK ' + event.detail.page.url,
)
})
Давайте отправим форму и выведем последние строки журнала:
<script setup>
import { Form } from '@inertiajs/vue3'
import { visitLog } from '../../app.js'
</script>
<template>
<h1>New post</h1>
<Form action="/posts" method="post">
<input type="text" name="title" />
<button type="submit">Save</button>
</Form>
<ul>
<li
v-for="(line, index) in visitLog"
:key="index"
>
{{ line }}
</li>
</ul>
</template>
Сделайте сохранение отдела работника Leo так, чтобы удачный ответ Inertia без ошибок проверки добавлял одну строку в общий журнал на клиенте.