- Mensajes: 46
- Gracias recibidas: 1
Laravel 8 - Ejemplo de controlador CRUD
- luispindola
- Autor del tema
- Fuera de línea
- Administrador
Menos
Más
2 años 10 meses antes - 2 años 10 meses antes #21
por luispindola
Laravel 8 - Ejemplo de controlador CRUD Publicado por luispindola
Vista de formulario (form.blade.php)
Vista formulario show: (show.blade.php)
El controlador Usuarios.php
Y las rutas de web.php
@extends('layout.fixednavbar')
@section('contenido')
<h1>@if(isset($user))
Edita Usuario
@else
Nuevo Usuario
@endif</h1>
<form
name="form1"
role="form"
method="post"
@if(isset($user)){{-- varia el url del acction dependiendo si esta editando o creando --}}
action="{{url('/usuarios/'.$user->id.'/edit')}}">
@else
action="{{url('/usuarios')}}">
@endif
@csrf
@if(isset($user))
{{-- Solo cuando se va a editar --}}
@method('PUT')
@endif
@if ($errors->any())
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert">×</button>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="mb-3">
<label for="nombre" class="form-label">Nombre:</label>
<input type="text" class="form-control @error('nombre') is-invalid @enderror" id="nombre"
name="nombre"
value="@if(isset($user)){{$user->name}}@else{{old('nombre')}}@endif"
placeholder="Nombre de usuario">
@error('nombre')<div class="alert alert-danger">{{ $message }}</div>@enderror
</div>
<div class="mb-3">
<label for="email" class="form-label">Correo electrónico:</label>
<input type="mail" class="form-control @error('email') is-invalid @enderror" id="email"
name="email"
value="@if(isset($user)){{$user->email}}@else{{old('email')}}@endif"
placeholder="Correo electrónico">
@error('email')<div class="alert alert-danger">{{ $message }}</div>@enderror
</div>
<div class="mb-3">
<label for="password" class="form-label">Contraseña:</label>
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password"
name="password"
value="@if(isset($user)){{Crypt::decrypt($user->password,0)}}@else{{old('password')}}@endif"
placeholder="Contraseña">
@error('password')<div class="alert alert-danger">{{ $message }}</div>@enderror
</div>
<div class="mb-3">
<label for="password_confirmation" class="form-label">Confirmar Contraseña:</label>
<input type="password" class="form-control @error('password2') is-invalid @enderror" id="password_confirmation"
name="password_confirmation"
value="@if(isset($user)){{Crypt::decrypt($user->password,0)}}@else{{old('password_confirmation')}}@endif"
placeholder="Confirmar Contraseña">
@error('password_confirmation')<div class="alert alert-danger">{{ $message }}</div>@enderror
</div>
<div class="mb-3">
<button type="submit" class="btn btn-primary mb-3">Crear usuario</button>
</div>
</form>
@endsection
Vista formulario show: (show.blade.php)
@extends('layout.fixednavbar')
@section('contenido')
<h1>Datos de usuario {{$user->id}}</h1>
<div class="mb-3">
<label for="nombre" class="form-label">Nombre:</label>
<p><strong>{{$user->name}}</strong></p>
</div>
<div class="mb-3">
<label for="email" class="form-label">Correo electrónico:</label>
<p><strong>{{$user->email}}</strong></p>
</div>
<div class="mb-3">
<label for="password" class="form-label">Contraseña:</label>
<p><strong>{{Crypt::decrypt($user->password,0)}}</strong></p>
</div>
<form name="form1"
role="form"
method="post"
action="{{url('/usuarios/'.$user->id)}}">
<div class="mb-3">
@csrf
@method('DELETE')
<a class="btn btn-primary mb-3" href="{{url('/')}}">Regresar</a>
<button type="submit" class="btn btn-warning mb-3">Eliminar usuario</button>
</div>
</form>
@endsection
El controlador Usuarios.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Validation\Rule;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use App\Models\User;
class Usuarios extends Controller
{
public function create()
{ //MUESTRA FORMULARIO VACIO
return view('usuarios.form');
}
public function store(Request $request)
{ //RECIBE EL POST DEL CREATE
$request->validate([
'nombre' => 'required|min:8',
'email' => 'required|email|unique:App\Models\User,email',
'password' => 'required|min:8|confirmed',
'password_confirmation' => 'required'
]);
$user = User::create([
'name' => $request->nombre,
'email' => $request->email,
'password' => Crypt::encryptString($request->password)
]);
$user->save();
return redirect('/')->with(['mensaje' => 'Se creo usuario correctamente','tipo' => 'success']);
}
public function edit($user_id)
{
$user = User::find($user_id);
if(isset($user)) //Revisa que el usuario exista
{
$pass = Crypt::decrypt($user->password,0);
return view('usuarios.form',['user' => $user]);
}
else
{
throw new ModelNotFoundException();
}
}
public function update($user_id, Request $request)
{
$user = User::find($user_id);
if(isset($user)) //Revisa que el usuario exista
{
$request->validate([
'nombre' => 'required|min:8',
'email' => 'required|email|unique:App\Models\User,email',
'email' => [
'required','email',
Rule::unique('users')->ignore($user->id),
],
'password' => 'required|min:8|confirmed',
'password_confirmation' => 'required'
]);
$user = User::find($user_id);
$user->name = $request->nombre;
$user->email = $request->email;
$user->password = Crypt::encryptString($request->password);
$user->save();
return redirect('/')->with(['mensaje' => 'Se editó usuario correctamente','tipo' => 'info']);
}
else
{
throw new ModelNotFoundException();
}
}
public function show($user_id)
{
$user = User::find($user_id);
if(isset($user))
{
return view('usuarios.show',['user' => $user]);
}
else
{
throw new ModelNotFoundException();
}
}
public function destroy($user_id)
{
$user = User::find($user_id);
if(isset($user))
{
$user->delete();
return redirect('/')->with(['mensaje' => 'Se eliminó usuario correctamente','tipo' => 'warning']);
}
else
{
throw new ModelNotFoundException();
}
}
}
Y las rutas de web.php
Route::get('/usuarios', [Usuarios::class, 'create']);
Route::post('/usuarios', [Usuarios::class, 'store']);
Route::get('/usuarios/{id}/edit',[Usuarios::class, 'edit']);
Route::put('/usuarios/{id}/edit',[Usuarios::class, 'update']);
Route::get('/usuarios/{id}',[Usuarios::class, 'show']);
Route::delete('/usuarios/{id}',[Usuarios::class, 'destroy']);
Última Edición: 2 años 10 meses antes por luispindola.
Por favor, Identificarse o Crear cuenta para unirse a la conversación.
Tiempo de carga de la página: 0.231 segundos