Редактирование записи в Inertia
Пусть у записи уже есть текст, и его нужно поменять, а не писать заново. Пустая форма заставляет копировать старый заголовок и тело вручную.
Страница правки получает запись
с сервера и ставит текст в поля
атрибутом defaultValue.
Форма уходит методом put, модель
обновляет строку, а контроллер
возвращает человека на экран
этой записи.
Давайте разрешим запись заголовка и текста в модели:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = [
'title',
'body',
];
}
?>
Давайте опишем просмотр, форму правки и сохранение изменений:
<?php
use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::get('/posts/{post}', function (Post $post) {
return Inertia::render('Posts/Show', [
'title' => $post->title,
'body' => $post->body,
]);
});
Route::get('/posts/{post}/edit', function (Post $post) {
return Inertia::render('Posts/Edit', [
'post' => [
'id' => $post->id,
'title' => $post->title,
'body' => $post->body,
],
]);
});
Route::put('/posts/{post}', function (
Request $request,
Post $post,
) {
$post->update([
'title' => $request->string('title'),
'body' => $request->string('body'),
]);
return redirect('/posts/'.$post->id);
});
?>
Давайте выведем заголовок и текст на экране записи:
<script setup>
defineProps({
title: String,
body: String,
})
</script>
<template>
<h1>{{ title }}</h1>
<p>{{ body }}</p>
</template>
Давайте откроем форму с полями заголовка и текста:
<script setup>
import { Form } from '@inertiajs/vue3'
defineProps({
post: Object,
})
</script>
<template>
<Form
:action="'/posts/' + post.id"
method="put"
>
<input
type="text"
name="title"
:defaultValue="post.title"
/>
<textarea
name="body"
:defaultValue="post.body"
></textarea>
<button type="submit">Save</button>
</Form>
</template>
Сделайте страницу правки работника с его именем и должностью так, чтобы после сохранения на экране была уже новая должность.