abm usuarios
This commit is contained in:
parent
e1f55e0ede
commit
766f8c24da
106
app/Http/Controllers/UsuarioController.php
Normal file
106
app/Http/Controllers/UsuarioController.php
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class UsuarioController extends Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->middleware('auth');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$usuarios = User::all();
|
||||||
|
|
||||||
|
return view('usuarios.index', compact('usuarios'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view('usuarios.create');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$datos = $request->validate([
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'email' => 'required|email|max:255|unique:users,email',
|
||||||
|
'password' => 'required|string|min:8|confirmed',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$usuario = new User();
|
||||||
|
|
||||||
|
$usuario->fill([
|
||||||
|
'name' => $datos['name'],
|
||||||
|
'email' => $datos['email'],
|
||||||
|
'password' => $datos['password'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$usuario->save();
|
||||||
|
|
||||||
|
return redirect()->route('usuarios.index')
|
||||||
|
->with('mensaje-success', 'Usuario registrado correctamente');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function show($id)
|
||||||
|
{
|
||||||
|
$usuario = User::findOrFail($id);
|
||||||
|
|
||||||
|
return view('usuarios.show', compact('usuario'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$usuario = User::findOrFail($id);
|
||||||
|
|
||||||
|
return view('usuarios.edit', compact('usuario'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(Request $request, $id)
|
||||||
|
{
|
||||||
|
$usuario = User::findOrFail($id);
|
||||||
|
|
||||||
|
$datos = $request->validate([
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'email' => [
|
||||||
|
'required',
|
||||||
|
'email',
|
||||||
|
'max:255',
|
||||||
|
Rule::unique('users', 'email')->ignore($usuario->id),
|
||||||
|
],
|
||||||
|
'password' => 'nullable|string|min:8|confirmed',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$usuario->name = $datos['name'];
|
||||||
|
$usuario->email = $datos['email'];
|
||||||
|
|
||||||
|
if (!empty($datos['password'])) {
|
||||||
|
$usuario->password = $datos['password'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$usuario->update();
|
||||||
|
|
||||||
|
return redirect()->route('usuarios.index')
|
||||||
|
->with('mensaje-success', 'Usuario actualizado correctamente');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy($id)
|
||||||
|
{
|
||||||
|
$usuario = User::findOrFail($id);
|
||||||
|
|
||||||
|
if ($usuario->id == auth()->id()) {
|
||||||
|
return redirect()->route('usuarios.index')
|
||||||
|
->with('mensaje-error', 'No puede eliminar su propio usuario');
|
||||||
|
}
|
||||||
|
|
||||||
|
$usuario->delete();
|
||||||
|
|
||||||
|
return redirect()->route('usuarios.index')
|
||||||
|
->with('mensaje-success', 'Usuario eliminado correctamente');
|
||||||
|
}
|
||||||
|
}
|
||||||
97
resources/views/usuarios/create.blade.php
Normal file
97
resources/views/usuarios/create.blade.php
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
@extends('layouts.admin')
|
||||||
|
|
||||||
|
@section('contenido')
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
<div class="col-lg-11 col-md-11">
|
||||||
|
<h3>Nuevo Usuario</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-10">
|
||||||
|
@include('compartido.mensajes')
|
||||||
|
@include('compartido.errores')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<form method="POST" action="{{ route('usuarios.store') }}">
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="name">Nombre (*)</label>
|
||||||
|
|
||||||
|
<input type="text"
|
||||||
|
name="name"
|
||||||
|
id="name"
|
||||||
|
value="{{ old('name') }}"
|
||||||
|
class="form-control"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="email">Correo electrónico (*)</label>
|
||||||
|
|
||||||
|
<input type="email"
|
||||||
|
name="email"
|
||||||
|
id="email"
|
||||||
|
value="{{ old('email') }}"
|
||||||
|
class="form-control"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="password">Contraseña (*)</label>
|
||||||
|
|
||||||
|
<input type="password"
|
||||||
|
name="password"
|
||||||
|
id="password"
|
||||||
|
class="form-control"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="password_confirmation">
|
||||||
|
Confirmar contraseña (*)
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="password"
|
||||||
|
name="password_confirmation"
|
||||||
|
id="password_confirmation"
|
||||||
|
class="form-control"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
<button type="submit"
|
||||||
|
class="btn btn-success btn-block btn-lg">
|
||||||
|
Guardar
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
<a href="{{ route('usuarios.index') }}"
|
||||||
|
class="btn btn-primary btn-block btn-lg">
|
||||||
|
Salir
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
@endsection
|
||||||
104
resources/views/usuarios/edit.blade.php
Normal file
104
resources/views/usuarios/edit.blade.php
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
@extends('layouts.admin')
|
||||||
|
|
||||||
|
@section('contenido')
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
<div class="col-lg-11 col-md-11">
|
||||||
|
<h3>Editar Usuario</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-10">
|
||||||
|
@include('compartido.mensajes')
|
||||||
|
@include('compartido.errores')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<form method="POST"
|
||||||
|
action="{{ route('usuarios.update', $usuario->id) }}">
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="name">Nombre (*)</label>
|
||||||
|
|
||||||
|
<input type="text"
|
||||||
|
name="name"
|
||||||
|
id="name"
|
||||||
|
value="{{ old('name', $usuario->name) }}"
|
||||||
|
class="form-control"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="email">Correo electrónico (*)</label>
|
||||||
|
|
||||||
|
<input type="email"
|
||||||
|
name="email"
|
||||||
|
id="email"
|
||||||
|
value="{{ old('email', $usuario->email) }}"
|
||||||
|
class="form-control"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="password">
|
||||||
|
Nueva contraseña (opcional)
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="password"
|
||||||
|
name="password"
|
||||||
|
id="password"
|
||||||
|
class="form-control">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group col-md-4">
|
||||||
|
<label for="password_confirmation">
|
||||||
|
Confirmar nueva contraseña
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="password"
|
||||||
|
name="password_confirmation"
|
||||||
|
id="password_confirmation"
|
||||||
|
class="form-control">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="text-muted">
|
||||||
|
Deje los campos de contraseña vacíos si no desea modificarla.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
<button type="submit"
|
||||||
|
class="btn btn-success btn-block btn-lg">
|
||||||
|
Actualizar
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
<a href="{{ route('usuarios.index') }}"
|
||||||
|
class="btn btn-primary btn-block btn-lg">
|
||||||
|
Salir
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
@endsection
|
||||||
100
resources/views/usuarios/index.blade.php
Normal file
100
resources/views/usuarios/index.blade.php
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
@extends('layouts.admin')
|
||||||
|
|
||||||
|
@section('contenido')
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
<div class="col-12 col-md-11">
|
||||||
|
<h3>Listado de Usuarios</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
<div class="col-md-2">
|
||||||
|
<a href="{{ route('usuarios.create') }}"
|
||||||
|
class="btn btn-success btn-block btn-lg">
|
||||||
|
Nuevo
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
<div class="col-12 col-md-11">
|
||||||
|
|
||||||
|
@include('compartido.mensajes')
|
||||||
|
@include('compartido.errores')
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
|
||||||
|
<table class="table table-striped table-bordered table-hover"
|
||||||
|
id="example">
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Id</th>
|
||||||
|
<th>Nombre</th>
|
||||||
|
<th>Email</th>
|
||||||
|
<th>Acciones</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
@foreach($usuarios as $usuario)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $usuario->id }}</td>
|
||||||
|
<td>{{ $usuario->name }}</td>
|
||||||
|
<td>{{ $usuario->email }}</td>
|
||||||
|
|
||||||
|
<td align="center">
|
||||||
|
|
||||||
|
<a class="btn btn-info"
|
||||||
|
href="{{ route('usuarios.show', $usuario->id) }}"
|
||||||
|
title="Ver">
|
||||||
|
<i class="fa fa-eye"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="btn btn-warning"
|
||||||
|
href="{{ route('usuarios.edit', $usuario->id) }}"
|
||||||
|
title="Editar">
|
||||||
|
<i class="fa fa-pencil"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<form method="POST"
|
||||||
|
action="{{ route('usuarios.destroy', $usuario->id) }}"
|
||||||
|
style="display:inline;">
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
@method('DELETE')
|
||||||
|
|
||||||
|
<button type="submit"
|
||||||
|
class="btn btn-danger"
|
||||||
|
onclick="return confirm('¿Está seguro de eliminar el usuario?');"
|
||||||
|
title="Eliminar">
|
||||||
|
<i class="fa fa-remove"></i>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@push('scripts')
|
||||||
|
<script>
|
||||||
|
$('#example').DataTable({
|
||||||
|
dom: 'Bfrtip',
|
||||||
|
buttons: ['excel'],
|
||||||
|
pageLength: 5
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
56
resources/views/usuarios/show.blade.php
Normal file
56
resources/views/usuarios/show.blade.php
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
@extends('layouts.admin')
|
||||||
|
|
||||||
|
@section('contenido')
|
||||||
|
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
<div class="col-md-10">
|
||||||
|
|
||||||
|
<h3>Detalle del Usuario</h3>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
<strong>ID:</strong>
|
||||||
|
{{ $usuario->id }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
<strong>Nombre:</strong>
|
||||||
|
{{ $usuario->name }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
<strong>Correo electrónico:</strong>
|
||||||
|
{{ $usuario->email }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
<a href="{{ route('usuarios.edit', $usuario->id) }}"
|
||||||
|
class="btn btn-warning btn-block">
|
||||||
|
Editar
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
<a href="{{ route('usuarios.index') }}"
|
||||||
|
class="btn btn-primary btn-block">
|
||||||
|
Salir
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
@ -3,6 +3,8 @@
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use App\Http\Controllers\CategoriasController;
|
use App\Http\Controllers\CategoriasController;
|
||||||
use App\Http\Controllers\ProductoController;
|
use App\Http\Controllers\ProductoController;
|
||||||
|
use App\Http\Controllers\UsuarioController;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Web Routes
|
| Web Routes
|
||||||
|
|
@ -32,4 +34,6 @@ Route::resource('categorias', CategoriasController::class)->middleware('auth');
|
||||||
Route::resource('productos', ProductoController::class);
|
Route::resource('productos', ProductoController::class);
|
||||||
Route::put('categorias/restaurar/{categoria}', [CategoriasController::class, 'restaurar'])->name('categorias.restaurar')->middleware('auth');
|
Route::put('categorias/restaurar/{categoria}', [CategoriasController::class, 'restaurar'])->name('categorias.restaurar')->middleware('auth');
|
||||||
Auth::routes();
|
Auth::routes();
|
||||||
|
Route::resource('usuarios', UsuarioController::class)
|
||||||
|
->middleware('auth');
|
||||||
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
|
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user