Como criar formulário editar com Laravel 11 e React
Neste tutorial, será apresentado como criar um formulário de edição com Laravel 11 + Breeze + React.
Primeiramente, será demonstrado como recuperar os dados para o formulário editar.
Em seguida, será explicado como criar o formulário editar com React.
Por fim, será mostrado como atualizar o registro no banco de dados com Laravel.
Download do código fonte desenvolvido na aula: Download
PlayList sobre Laravel 11 + Breeze + React 11: Acessar
Receber as aulas gratuitas do curso de Laravel: Acessar
Para começar, é utilizado como base o projeto da aula "Como criar formulário de cadastro com Laravel 11 e React".
Criada a rota no arquivo "routes/web.php".
Route::get('/edit-user/{user}', [UserController::class, 'edit'])->name('users.edit');
Criado o método "edit" na controller "app/Http/Controllers/UserController.php". O método é responsável em recuperar os dados do registro no banco de dados e carregar a "view Users/UserEdit.jsx".
public function edit(User $user): Response
{
return Inertia::render('Users/UserEdit', ['user' => $user]);
}
Criada a view com React no Laravel, em "resources/js/Pages/Users/UserEdit.js", com o formulário e a função handleSubmit, que recebe os dados do formulário.
import InfoButton from '@/Components/Button/InfoButton';
import PrimaryButton from '@/Components/Button/PrimaryButton';
import WarningButton from '@/Components/Button/WarningButton';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Head, Link, useForm } from '@inertiajs/react';
export default function UserEdit({ auth, user }) {
const {data, setData, put, processing, errors} = useForm({
id: user.id || '',
name: user.name || '',
email: user.email || '',
});
const handleSubmit = (e) => {
e.preventDefault(); // Não atualizar a página
// Enviar os dados para a rota editar
put(route('users.update', {user: data.id}));
}
return (
<AuthenticatedLayout
user={auth.user}
header={<h2 className="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">Usuário</h2>}
>
<Head title="Usuário" />
<div className="py-4 max-w-7xl mx-auto sm:px-6 lg:px-8">
<div className="overflow-hidden bg-white shadow-lg sm:rounded-lg dark:bg-gray-800">
<div className="flex justify-between items-center m-4">
<h3 className="text-lg">Editar</h3>
<div className="flex space-x-1">
<Link href={route('users.index')}>
<InfoButton className="text-sm">Listar</InfoButton>
</Link>
<Link href={route('users.show', { user: user.id})}>
<PrimaryButton className="text-sm">Visualizar</PrimaryButton>
</Link>
</div>
</div>
{/* Formulário para editar usuário */}
<div className="bg-gray-50 text-sm dark:bg-gray-700 p-4 rounded-lg shadow-md">
<form onSubmit={handleSubmit}>
<div className="mb-4">
<label htmlFor="name" className="block text-sm font-medium text-gray-700 ">Nome</label>
<input
id="name"
type="text"
placeholder="Nome completo do usuário"
value={data.name}
onChange={(e) => setData('name', e.target.value)}
className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"
/>
{errors.name && <span className="text-red-600">{errors.name}</span>}
</div>
<div className="mb-4">
<label htmlFor="email" className="block text-sm font-medium text-gray-700 ">E-mail</label>
<input
id="email"
type="email"
placeholder="Melhor e-mail do usuário"
value={data.email}
onChange={(e) => setData('email', e.target.value)}
className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"
/>
{errors.email && <span className="text-red-600">{errors.email}</span>}
</div>
<div className="flex justify-end">
<WarningButton
type="submit"
disabled={processing}
className="text-sm"
>
Salvar
</WarningButton>
</div>
</form>
</div>
</div>
</div>
</AuthenticatedLayout>
);
}
Os dados do formulário acima são enviados para a rota "users.update", sendo necessário criá-la no arquivo "routes/web.php".
Route::put('/update-user/{user}', [UserController::class, 'update'])->name('users.update');
Criado o método "update" na controller "app/Http/Controllers/UserController.php". O método é responsável por editar o usuário no banco de dados e redirecionar para a tela de visualização "users.show".
public function update(Request $request, User $user)
{
// Validar os dados de formulário
$request->validate(
[
'name' => 'required|string|max:255',
'email' => "required|string|email|max:255|unique:users,email,{$user->id}",
],
[
'name.required' => 'O campo nome é obrigatório.',
'name.string' => 'O nome deve ser uma string válida.',
'name.max' => 'O nome não pode ter mais que 255 caracteres.',
'email.required' => 'O campo e-mail é obrigatório.',
'email.string' => 'O e-mail deve ser uma string válida.',
'email.email' => 'O e-mail deve ser um endereço de e-mail válido.',
'email.max' => 'O e-mail não pode ter mais que 255 caracteres.',
'email.unique' => 'Este e-mail já está cadastrado.',
]
);
$user->update([
'name' => $request->name,
'email' => $request->email,
]);
return Redirect::route('users.show', ['user' => $user->id])->with('success', 'Usuário editado com sucesso!');
}
Baixar o código-fonte completo do projeto.
Bom, era isso. Espero que o tutorial tenha sido útil!