From 495f97fb67b143cf58be0c55a645eaa575763601 Mon Sep 17 00:00:00 2001 From: Santiago Date: Tue, 9 Jun 2026 21:08:32 -0300 Subject: [PATCH] Layout,Bootstrap,Request y flash --- app/Http/Controllers/PersonaController.php | 18 +- app/Http/Requests/StorePersonaRequest.php | 46 +++++ app/Http/Requests/UpdatePersonaRequest.php | 45 +++++ app/Models/persona.php | 9 +- resources/views/compartido/errores.blade.php | 9 + resources/views/compartido/mensajes.blade.php | 3 + resources/views/layouts/admin.blade.php | 111 ++++++++++++ resources/views/persona/edit.blade.php | 96 ++++++++-- resources/views/persona/index.blade.php | 164 ++++++++++++++---- resources/views/persona/new.blade.php | 91 ++++++++-- resources/views/persona/show.blade.php | 66 ++++--- routes/web.php | 6 +- 12 files changed, 546 insertions(+), 118 deletions(-) create mode 100644 app/Http/Requests/StorePersonaRequest.php create mode 100644 app/Http/Requests/UpdatePersonaRequest.php create mode 100644 resources/views/compartido/errores.blade.php create mode 100644 resources/views/compartido/mensajes.blade.php create mode 100644 resources/views/layouts/admin.blade.php diff --git a/app/Http/Controllers/PersonaController.php b/app/Http/Controllers/PersonaController.php index 3d08181..db8037c 100644 --- a/app/Http/Controllers/PersonaController.php +++ b/app/Http/Controllers/PersonaController.php @@ -4,13 +4,15 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; -use App\Models\persona; +use App\Models\Persona; +use App\Http\Requests\UpdatePersonaRequest; +use App\Http\Requests\StorePersonaRequest; class PersonaController extends Controller { public function index(Request $request){ - $persona = persona::all(); + $persona = Persona::withTrashed()->get(); return view('persona.index', ["persona"=>$persona]); } @@ -32,7 +34,7 @@ public function show($id){ } - public function store(Request $request): RedirectResponse + public function store(StorePersonaRequest $request): RedirectResponse { $persona = new persona(); $persona -> fill([ @@ -51,7 +53,7 @@ public function show($id){ return redirect('/persona'); } - public function update(Request $request, $id){ + public function update(UpdatePersonaRequest $request, $id){ $persona = persona::findOrfail($id); $persona -> fill([ 'nombre' => $request->input('nombre'), @@ -61,4 +63,10 @@ public function show($id){ $persona->save(); return redirect('/persona'); } - } \ No newline at end of file + + public function restore($id){ + $persona = persona::withTrashed()->findOrfail($id); + $persona->restore(); + return redirect('/persona'); + } +} \ No newline at end of file diff --git a/app/Http/Requests/StorePersonaRequest.php b/app/Http/Requests/StorePersonaRequest.php new file mode 100644 index 0000000..70721bd --- /dev/null +++ b/app/Http/Requests/StorePersonaRequest.php @@ -0,0 +1,46 @@ +|string> + */ + public function rules(): array + { + return [ + 'nombre' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:20|', + 'apellido' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:20|', + 'dni' => 'required|numeric|digits_between:7,8|unique:persona,dni,' . $this->route('persona') . ',id_persona', + ]; + } + + public function messages() { + + return [ + 'nombre.required' => 'El campo nombre es requerido', + 'nombre.regex' => 'El campo nombre solo debe contener letras', + 'nombre.max' => 'El campo nombre debe contener un maximo de 20 caracteres', + 'apellido.required' => 'El campo apellido es requerido', + 'apellido.regex' => 'El campo apellido solo debe contener letras', + 'apellido.max' => 'El campo apellido debe contener un maximo de 20 caracteres', + 'dni.required' => 'El campo dni es requerido', + 'dni.unique' => 'Ya existe una persona con este dni', + 'dni.numeric' => 'El campo dni debe ser un numero', + 'dni.digits_between' => 'El campo dni debe contener entre 7 y 8 digitos' + ]; + } +} diff --git a/app/Http/Requests/UpdatePersonaRequest.php b/app/Http/Requests/UpdatePersonaRequest.php new file mode 100644 index 0000000..96f0d67 --- /dev/null +++ b/app/Http/Requests/UpdatePersonaRequest.php @@ -0,0 +1,45 @@ +|string> + */ + public function rules(): array + { + return [ + 'nombre' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:20|', + 'apellido' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:20|', + 'dni' => 'required|unique:persona,dni,' . $this->route('persona') . ',id_persona|numeric|digits_between:7,8', + ]; + } + public function messages() { + + return [ + 'nombre.required' => 'El campo nombre es requerido', + 'nombre.regex' => 'El campo nombre solo debe contener letras', + 'nombre.max' => 'El campo nombre debe contener un maximo de 20 caracteres', + 'apellido.required' => 'El campo apellido es requerido', + 'apellido.regex' => 'El campo apellido solo debe contener letras', + 'apellido.max' => 'El campo apellido debe contener un maximo de 20 caracteres', + 'dni.required' => 'El campo dni es requerido', + 'dni.unique' => 'Ya existe una persona con este dni', + 'dni.numeric' => 'El campo dni debe ser un numero', + 'dni.digits_between' => 'El campo dni debe contener entre 7 y 8 digitos' + ]; + } +} diff --git a/app/Models/persona.php b/app/Models/persona.php index d6a6aad..010a303 100644 --- a/app/Models/persona.php +++ b/app/Models/persona.php @@ -3,21 +3,24 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Model; use App\Models\persona; + class Persona extends Model { use HasFactory; + use SoftDeletes; protected $table = 'persona'; public $primaryKey = 'id_persona'; - public $timestamps = false; + public $timestamps = true; protected $fillable = [ 'nombre', - 'apellido', - 'dni', + 'apellido', + 'dni', ]; } diff --git a/resources/views/compartido/errores.blade.php b/resources/views/compartido/errores.blade.php new file mode 100644 index 0000000..16ff22c --- /dev/null +++ b/resources/views/compartido/errores.blade.php @@ -0,0 +1,9 @@ +@if ($errors->any()) +
+ +
+@endif \ No newline at end of file diff --git a/resources/views/compartido/mensajes.blade.php b/resources/views/compartido/mensajes.blade.php new file mode 100644 index 0000000..8b0ba24 --- /dev/null +++ b/resources/views/compartido/mensajes.blade.php @@ -0,0 +1,3 @@ +@if (session('mensaje-success')) +

{{ session('mensaje-success') }}

+@endif \ No newline at end of file diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php new file mode 100644 index 0000000..67883ed --- /dev/null +++ b/resources/views/layouts/admin.blade.php @@ -0,0 +1,111 @@ + + + + + + + + + + @yield('title','Sistema Taller') + + + + + + + + @stack('styles') + + + + + +
+ + @yield('contenido') +
+ + + + + + + + + + + + + + + + @stack('scripts') + + diff --git a/resources/views/persona/edit.blade.php b/resources/views/persona/edit.blade.php index c650041..3844d74 100644 --- a/resources/views/persona/edit.blade.php +++ b/resources/views/persona/edit.blade.php @@ -1,22 +1,80 @@ -
- @csrf - @method('PUT') -
-
- - value="{{OLD('nombre', $persona->nombre)}}" required> -
-
-
- - value="{{OLD('apellido', $persona->apellido)}}" required> +@extends('layouts.admin') +@section('contenido') + + +
+ +
+

Editar Persona

+
+
+
+
+ + @include('compartido.mensajes') + @include('compartido.errores') + +
+
+
+ + + + @csrf + @method('PUT') + + +
+ + +
+ + + +
-
-
- - value="{{OLD('DNI', $persona->dni)}}" required> +
+ +
-
- -
\ No newline at end of file + +
+ + +
+
+ + +
+
+ + +
+
+ + Salir +
+
+ + +@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/persona/index.blade.php b/resources/views/persona/index.blade.php index 25e5356..7040756 100644 --- a/resources/views/persona/index.blade.php +++ b/resources/views/persona/index.blade.php @@ -1,42 +1,130 @@ - - - - Personas - - -

Personas

-Crear Nuevo Registro -
    - @foreach($persona as $per) -
  • - {{ $per->nombre }} - — {{ $per->apellido }} - —{{ $per->dni }} - (ID: {{ $per->id_persona}}) -  |  - - Ver Más +@extends('layouts.admin') +@section('contenido') -
    - @csrf - @method('DELETE') - -
    + -
    - @csrf - -
    +
    + +
    +

    Listado de Personas

    +
    +
    + @include('compartido.mensajes') + @include('compartido.errores') -
  • - @endforeach -
+
+ +
- - \ No newline at end of file +
+ +
+
+ + + + +
+ + + + + + + + + + + + + + @foreach($persona as $per) + + + + + + + + @endforeach + +
IdNombreApellidoDniAcciones
{{ $per->id_persona}}{{ $per->nombre }}{{ $per->apellido }}{{ $per->dni }} + + @if($per->deleted_at == null) +
+ @csrf + @method('DELETE') + + + + + + + + + + + + + +
+ @else +
+ @csrf + @method('PUT') + + + +
+ + @endif +
+
+ +
+
+ +@endsection +@push('styles') + +@endpush +@push('scripts') + +@endpush diff --git a/resources/views/persona/new.blade.php b/resources/views/persona/new.blade.php index 3d9d988..567a879 100644 --- a/resources/views/persona/new.blade.php +++ b/resources/views/persona/new.blade.php @@ -1,18 +1,79 @@ -
+@extends('layouts.admin') +@section ('contenido') + + +
+ +
+

Nueva Persona

+
+
+
+
+ + @include('compartido.mensajes') + @include('compartido.errores') + +
+
+
+ + + @csrf -
-
- + + +
+ +
+ + + + +
+ +
+ + +
+
+ + +
-
-
- + + + +
+
+ + +
+
+ + Salir +
-
-
- -
-
- -
- \ No newline at end of file + + +@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/persona/show.blade.php b/resources/views/persona/show.blade.php index bd23f85..b6a6d65 100644 --- a/resources/views/persona/show.blade.php +++ b/resources/views/persona/show.blade.php @@ -1,38 +1,32 @@ - - - - - - Ver Registros - - +@extends('layouts.admin') +@section ('contenido') +
+
+

Ver Persona

+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
-

Ver Registro

+ +
+
+ Salir +
+
- - -
-
- -
- -
-
- -
- - -
-
- -
- - - - - \ No newline at end of file +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 47b9f49..e244ef7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,10 +17,12 @@ use App\Http\Controllers\PersonaController; Route::get('/', function () { return view('welcome'); }); -Route::get('persona', [PersonaController::class, 'index'])->name('persona.index'); +Route::resource('persona', PersonaController::class); +Route::put('persona/restaurar/{id}', [PersonaController::class, 'restore'])->name('persona.restore'); +/*Route::get('persona', [PersonaController::class, 'index'])->name('persona.index'); Route::post('persona', [PersonaController::class, 'store']) ->name('persona.store'); Route::get('persona/create', [PersonaController::class, 'create']) ->name('persona.create'); Route::get('persona/{id}', [PersonaController::class, 'show']) ->name('persona.show'); Route::delete('persona/{id}', [PersonaController::class, 'destroy']) ->name('persona.destroy'); Route::put('persona/update/{id}', [PersonaController::class, 'update']) ->name('persona.update'); -Route::get('persona/{id}/edit', [PersonaController::class, 'edit']) ->name('persona.edit'); \ No newline at end of file +Route::get('persona/{id}/edit', [PersonaCon:r::class);]*/ \ No newline at end of file