From 0e53040ac359dcd76370ef5696f17ac2ba0fa40d Mon Sep 17 00:00:00 2001 From: a220815am <a220815am@h31.informatica.escoladeltreball.org> Date: Fri, 28 Mar 2025 18:29:39 +0100 Subject: [PATCH 1/3] movie form working --- app/Http/Controllers/MoviesController.php | 64 +++++++++++++++++++ app/Models/Movie.php | 19 ++++++ .../2025_03_28_165130_create_movies.php | 35 ++++++++++ resources/views/categories/create.blade.php | 13 ++++ resources/views/movies/create.blade.php | 52 +++++++++++++++ resources/views/movies/moviesList.blade.php | 49 ++++++++++++++ routes/web.php | 16 ++++- 7 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/MoviesController.php create mode 100644 app/Models/Movie.php create mode 100644 database/migrations/2025_03_28_165130_create_movies.php create mode 100644 resources/views/categories/create.blade.php create mode 100644 resources/views/movies/create.blade.php create mode 100644 resources/views/movies/moviesList.blade.php diff --git a/app/Http/Controllers/MoviesController.php b/app/Http/Controllers/MoviesController.php new file mode 100644 index 00000000..17e876b6 --- /dev/null +++ b/app/Http/Controllers/MoviesController.php @@ -0,0 +1,64 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use App\Models\Movie; +use Illuminate\Support\Facades\Log; + +class MoviesController extends Controller +{ + public function index() + { + $movies = Movie::all(); + $genders = $movies->pluck('gender')->unique(); + return view('movies.moviesList', compact('movies', 'genders')); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view('movies.create'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + try { + Log::info($request->all()); + + $request->validate([ + 'name' => 'required', + 'gender' => 'required', + 'synopsis' => 'required|max:255', + 'image' => 'nullable', + ]); + + $movies = new Movie(); + $movies->name = $request->name ?? null; + $movies->gender = $request->gender ?? null; + $movies->synopsis = $request->synopsis ?? null; + + if ($request->hasFile('image')) { + $movies->image = $request->file('image')->store('public/images'); + } + + $movies->save(); + + return redirect()->route('movies.index')->with('success', 'La movie se ha guardado correctamente.'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return redirect()->route('movies.index')->with('error', 'Ha habido un error al guardar la serie.'); + } + } +} + diff --git a/app/Models/Movie.php b/app/Models/Movie.php new file mode 100644 index 00000000..782e4967 --- /dev/null +++ b/app/Models/Movie.php @@ -0,0 +1,19 @@ +<?php + +namespace App\Models; + +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Model; + +class Movie extends Model +{ + use HasFactory; + + protected $fillable = [ + 'name', + 'image', + 'gender', + 'synopsis', + + ]; +} diff --git a/database/migrations/2025_03_28_165130_create_movies.php b/database/migrations/2025_03_28_165130_create_movies.php new file mode 100644 index 00000000..35f3cbdc --- /dev/null +++ b/database/migrations/2025_03_28_165130_create_movies.php @@ -0,0 +1,35 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +return new class extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('movies', function (Blueprint $table) { + $table->id(); + $table->string('name'); + $table->string('image')->nullable(); + $table->string('synopsis')->nullable(); + $table->string('gender')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('movies'); + } +}; diff --git a/resources/views/categories/create.blade.php b/resources/views/categories/create.blade.php new file mode 100644 index 00000000..31ac36b2 --- /dev/null +++ b/resources/views/categories/create.blade.php @@ -0,0 +1,13 @@ +<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet"> +<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> +<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script> +<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> + +<form action="{{ route('categories.store') }}" method="POST" class="p-4 bg-light border rounded"> + @csrf + <div class="form-group mb-3"> + <label for="genere" class="form-label">Género</label> + <input type="text" class="form-control" id="genere" name="genere" placeholder="Introduce el género"> + </div> + <button type="submit" class="btn btn-primary">Añadir Categoría</button> +</fo \ No newline at end of file diff --git a/resources/views/movies/create.blade.php b/resources/views/movies/create.blade.php new file mode 100644 index 00000000..f0054c50 --- /dev/null +++ b/resources/views/movies/create.blade.php @@ -0,0 +1,52 @@ +@extends('layouts.app') + +@section('content') + <style> + .form-control, label { + color: black; + } + </style> + + <div class="container"> + <div class="row justify-content-center"> + <div class="col-md-12"> + <form action="{{ route('movies.store') }}" method="POST" class="p-4 bg-light border rounded"> + @csrf + + <div class="form-group mb-3"> + <label for="name" class="form-label">Title</label> + <input type="text" class="form-control" id="name" name="name"> + </div> + + <div class="form-group mb-3"> + <label for="gender" class="form-label">Género</label> + <select class="form-control" id="gender" name="gender"> + <option value="Accion">Acción</option> + <option value="Comedia">Comedia</option> + <option value="Drama">Drama</option> + <option value="Fantasia">Fantasía</option> + <option value="Terror">Terror</option> + <option value="Misterio">Misterio</option> + <option value="Romance">Romance</option> + <option value="Ciencia Ficcion">Ciencia Ficción</option> + <option value="Suspenso">Suspenso</option> + </select> + </div> + + <div class="form-group mb-3"> + <label for="synopsis" class="form-label">Sinopsis</label> + <textarea class="form-control" id="synopsis" name="synopsis"></textarea> + </div> + + <div class="form-group mb-3"> + <label for="image" class="form-label">Carátula</label> + <input type="file" class="form-control" id="image" name="image"> + </div> + + <button type="submit" class="btn btn-primary">Create Movies</button> + </form> + </div> + </div> + </div> +@endsection + diff --git a/resources/views/movies/moviesList.blade.php b/resources/views/movies/moviesList.blade.php new file mode 100644 index 00000000..b26ac969 --- /dev/null +++ b/resources/views/movies/moviesList.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.app') + +@section('content') + <div class="container"> + <div class="row justify-content-center"> + <div class="col-md-12"> + <div class="header-image"> + <img src="/path-to-header-image.jpg" alt="Header" class="img-fluid"> + </div> + <div class="movies-list"> + @foreach ($genders as $gender) + <h2 class="text-light mt-4">{{ ucfirst($gender) }}</h2> + <div class="row"> + @foreach ($movies as $movie) + @if ($movie->gender == $gender) + <div class="col-md-3 col-sm-6 mb-4"> + <div class="card bg-dark text-white"> + <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}"> + <div class="card-img-overlay d-flex align-items-end"> + <h5 class="card-title">{{ $movie->title }}</h5> + </div> + </div> + </div> + @endif + @endforeach + </div> + @endforeach + </div> + </div> + </div> + </div> +@endsection + +<style> + .header-image img { + width: 100%; + height: auto; + } + .series-list .card { + border-radius: 10px; + overflow: hidden; + } + .series-list .card-img { + transition: transform 0.3s ease; + } + .series-list .card:hover .card-img { + transform: scale(1.05); + } +</style> diff --git a/routes/web.php b/routes/web.php index 52173c06..67195e17 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,7 +2,8 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\UpdateController; - +use App\Http\Controllers\SeriesController; +use App\Http\Controllers\MoviesController; Route::get("/upload-image", [UploadController::class, "showForm"])->name("image.form"); Route::post("/upload-image", [UploadController::class, "upload"])->name("image.upload"); @@ -11,10 +12,19 @@ return view('welcome'); }); - +//series routes Route::get("/series", [SeriesController::class, "index"])->name("series.index"); Route::get('/series/create', [SeriesController::class, 'create'])->name('series.create'); Route::post('/series/crear', [SeriesController::class, 'store'])->name('series.store'); ->>>>>>> routes/web.php + + + +//movies routes +Route::get("/movies", [MoviesController::class, "index"])->name("movies.index"); + +Route::get('/movies/create', [MoviesController::class, 'create'])->name('movies.create'); + +Route::post('/movies/crear', [MoviesController::class, 'store'])->name('movies.store'); + -- GitLab From 2658b7e4baa24aaeac7d96f4dbc6b3d22f2b9151 Mon Sep 17 00:00:00 2001 From: a231991zp <zaraypastor07@gmail.com> Date: Sun, 30 Mar 2025 20:13:32 +0200 Subject: [PATCH 2/3] add: creada la pagina vista detalle con la ruta, vista y controlador --- app/Http/Controllers/MoviesController.php | 6 ++++ resources/views/movies/moviesDetail.blade.php | 36 +++++++++++++++++++ resources/views/movies/moviesList.blade.php | 5 +-- routes/web.php | 1 + 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 resources/views/movies/moviesDetail.blade.php diff --git a/app/Http/Controllers/MoviesController.php b/app/Http/Controllers/MoviesController.php index 17e876b6..cc3c5632 100644 --- a/app/Http/Controllers/MoviesController.php +++ b/app/Http/Controllers/MoviesController.php @@ -60,5 +60,11 @@ public function store(Request $request) return redirect()->route('movies.index')->with('error', 'Ha habido un error al guardar la serie.'); } } + + public function show($id){ + $movie = Movie::findOrFail($id); + return view('movies.show', compact('movie')); + } } + diff --git a/resources/views/movies/moviesDetail.blade.php b/resources/views/movies/moviesDetail.blade.php new file mode 100644 index 00000000..10a241c1 --- /dev/null +++ b/resources/views/movies/moviesDetail.blade.php @@ -0,0 +1,36 @@ +@extends('layouts.app') + +@section('content') +<div class="container mx-auto p-6 bg-black text-white"> + <div class="relative w-full h-96 bg-cover bg-center" style="background-image: url('{{ $movie->image }}');"> + <div class="absolute inset-0 bg-black bg-opacity-50 flex items-center"> + <div class="p-6"> + <h1 class="text-4xl font-bold">{{ $movie->name }}</h1> + <p class="text-lg">{{ $movie->gender }}</p> + <!--<p class="text-lg">{{ $movie->year }} | {{ $movie->duration }}</p> --> + </div> + </div> + </div> + <div class="mt-6"> + <h2 class="text-3xl font-bold">{{ $movie->name }}</h2> + <p class="mt-2 text-gray-300">{{ $movie->synopsis }}</p> + </div> + <!-- + <div class="mt-6"> + <h3 class="text-xl font-bold">Director:</h3> + <p class="text-gray-300">{{ $movie->director }}</p> + </div> + <div class="mt-6"> + <h3 class="text-xl font-bold">Actores:</h3> + <p class="text-gray-300">{{ implode(', ', $movie->actors) }}</p> + </div> + <div class="mt-6"> + <h3 class="text-xl font-bold">Premios:</h3> + <ul class="list-disc pl-5 text-gray-300"> + @foreach($movie->awards as $award) + <li>{{ $award }}</li> + @endforeach + </ul> + </div> --> +</div> +@endsection diff --git a/resources/views/movies/moviesList.blade.php b/resources/views/movies/moviesList.blade.php index b26ac969..ceb95243 100644 --- a/resources/views/movies/moviesList.blade.php +++ b/resources/views/movies/moviesList.blade.php @@ -14,12 +14,12 @@ @foreach ($movies as $movie) @if ($movie->gender == $gender) <div class="col-md-3 col-sm-6 mb-4"> - <div class="card bg-dark text-white"> + <a href="{{ route('movies.show', ['movie' => $movie->id]) }}" class="card bg-dark text-white"> <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}"> <div class="card-img-overlay d-flex align-items-end"> <h5 class="card-title">{{ $movie->title }}</h5> </div> - </div> + </a> </div> @endif @endforeach @@ -47,3 +47,4 @@ transform: scale(1.05); } </style> + diff --git a/routes/web.php b/routes/web.php index 67195e17..59a8b86c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -28,3 +28,4 @@ Route::post('/movies/crear', [MoviesController::class, 'store'])->name('movies.store'); +Route::get("/movies/{id}", [MoviesController::class, "show"])->name("movies.show"); -- GitLab From 1540208326a83f7b71b12b42ace68bc4e0949f97 Mon Sep 17 00:00:00 2001 From: a231991zp <a231991zp@h33.informatica.escoladeltreball.org> Date: Mon, 31 Mar 2025 17:14:39 +0200 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20Correcci=C3=B3n=20de=20error=20en=20?= =?UTF-8?q?la=20vista=20de=20detalles=20de=20pel=C3=ADcula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/MoviesController.php | 2 +- resources/views/movies/moviesDetail.blade.php | 18 ------------------ resources/views/movies/moviesList.blade.php | 3 +-- 3 files changed, 2 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/MoviesController.php b/app/Http/Controllers/MoviesController.php index cc3c5632..7307e264 100644 --- a/app/Http/Controllers/MoviesController.php +++ b/app/Http/Controllers/MoviesController.php @@ -63,7 +63,7 @@ public function store(Request $request) public function show($id){ $movie = Movie::findOrFail($id); - return view('movies.show', compact('movie')); + return view('movies.moviesDetail', compact('movie')); } } diff --git a/resources/views/movies/moviesDetail.blade.php b/resources/views/movies/moviesDetail.blade.php index 10a241c1..03ce3f24 100644 --- a/resources/views/movies/moviesDetail.blade.php +++ b/resources/views/movies/moviesDetail.blade.php @@ -7,7 +7,6 @@ <div class="p-6"> <h1 class="text-4xl font-bold">{{ $movie->name }}</h1> <p class="text-lg">{{ $movie->gender }}</p> - <!--<p class="text-lg">{{ $movie->year }} | {{ $movie->duration }}</p> --> </div> </div> </div> @@ -15,22 +14,5 @@ <h2 class="text-3xl font-bold">{{ $movie->name }}</h2> <p class="mt-2 text-gray-300">{{ $movie->synopsis }}</p> </div> - <!-- - <div class="mt-6"> - <h3 class="text-xl font-bold">Director:</h3> - <p class="text-gray-300">{{ $movie->director }}</p> - </div> - <div class="mt-6"> - <h3 class="text-xl font-bold">Actores:</h3> - <p class="text-gray-300">{{ implode(', ', $movie->actors) }}</p> - </div> - <div class="mt-6"> - <h3 class="text-xl font-bold">Premios:</h3> - <ul class="list-disc pl-5 text-gray-300"> - @foreach($movie->awards as $award) - <li>{{ $award }}</li> - @endforeach - </ul> - </div> --> </div> @endsection diff --git a/resources/views/movies/moviesList.blade.php b/resources/views/movies/moviesList.blade.php index ceb95243..b3b4782d 100644 --- a/resources/views/movies/moviesList.blade.php +++ b/resources/views/movies/moviesList.blade.php @@ -14,8 +14,7 @@ @foreach ($movies as $movie) @if ($movie->gender == $gender) <div class="col-md-3 col-sm-6 mb-4"> - <a href="{{ route('movies.show', ['movie' => $movie->id]) }}" class="card bg-dark text-white"> - <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}"> + <a href="{{ route('movies.show', ['id' => $movie->id]) }}" class="card bg-dark text-white"> <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}"> <div class="card-img-overlay d-flex align-items-end"> <h5 class="card-title">{{ $movie->title }}</h5> </div> -- GitLab