====== Curso Laravel 8.0 clase 01/06/2023 ====== Notas sobre la clase del 01/06/2023 del curso [[informatica:programacion:php:cursos:laravel_8|Curso de Laravel 8.0]] Terminología: * **Test de caracterización**: hacer tests sobre código ya hecho. Jornada de charla. José Manuel Areán opina como yo: si es un curso de Laravel, llegados a la mitad del curso, apenas hemos visto Laravel (comentar un poco MVC y poco más). Laravel está pensado para montar CRUDs. Repaso de lo que hicimos en Laravel hasta hoy (creación de modelo Product y un formulario para añadir). ''$fillable'' es para la asignación masiva. En él indicamos qué es lo único que podemos guardar en base de datos. ''dd()'' (//Dump and Die//) es muy útil en Laravel para ver información de las variables. Al crear el modelo, Laravel también creó el controlador ''ProductController.php'' con un esquema para hacer un CRUD Vamos a hacer el método ''show()'' del ''ProductController.php'': public function show(Product $product) { return view("product.view", compact("product")); } ''[[https://www.php.net/manual/es/function.compact.php|compact()]]'' crea un array a partir de una variable donde esa variable será el índice/clave del array. Creamos una vista ''view.blade.php'':

{{$product->name}}

{{$product->description}}

Tendremos accesible desde http://localhost/product/ Vamos a hacer el ''edit()'': public function edit(Product $product) { return view("product.edit", compact("product"); } Creamos una vista ''edit.blade.php'':
id}}" method="post"> @csrf @method("put") // ...
http://localhost/product/4/edit Vamos a hacer el ''update()'': public function update(UpdateProductRequest $request, Product $product) { $product->update($request->all()); return redirect(route("product.index")); } Ahora vamos a hacer ''destroy()'': public function destroy(Product $product) { $product->delete(); return \redirect(route("product.index")); // ¿por qué la barra invertida? } Falta hacer cambios en la vista para añadir un "botón" para borrar En el fichero ''web.php'': Route::resource("/product", ProductController::class)->except("destroy"); // Este apaño es para no usar la ruta que propone Laravel para borrar // y borrar mediante una ruta que definamos nosotros Route::get("/product/{product}/destroy", [ProductController::class, "destroy"])->name("product.destroy");

Listado de productos

Vamos a realizar la **separación por capas** (Aplicación, Dominio e Infraestructura). Toda la responsabilidad sobre comunicarse con la base de datos, debería estar en un repositorio (patrón repository). ''app/Http'' es infraestructura. Vamos a crear un directorio ''app/Domain'': * ''Contracts\IProductRepository.php'' Realmente tendría que ir fuera de la carpeta ''app'', pero eso complicaría más las cosas por culpa de Laravel ya que para Laravel todo tiene que estar en ''app''. namespace App\Domain\Contracts; interface IProductRepository { public function getAllProducts(); } El repositorio lo creamos en ''app/Infraestructure/'' y creamos la carpeta ''Repositories'' donde crearemos el fichero ''EloquentProductRepository.php'': namespace App\Infraestructure\Repositories; use App\Domain\Contracts\IProductRepository; use App\Models\Product; class EloquentProductRepository immplements IProductRepository { public function getAllProducts() { Product::all(); } } Laravel es bueno para proyectos grandes, el problema es cuando es necesario salirse de lo que Laravel ofrece. Para proyectos grandes, el profe recomienda Symfony, es mucho más flexible. El profe cuando empezó el Lifull se metió para gestionar un portal inmobiliario para el sudeste asiático gestionado con Laravel. El resto de la clase se dedicó a que la gente hablase de lo que le parece el curso y lo que espera de él en el futuro. En general quieren saber más de Laravel y menos de testing.