Herramientas de usuario

Herramientas del sitio


informatica:programacion:php:cursos:laravel_8:20250601

Curso Laravel 8.0 clase 01/06/2023

Notas sobre la clase del 01/06/2023 del curso 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"));
 
}

compact() crea un array a partir de una variable donde esa variable será el índice/clave del array.

Creamos una vista view.blade.php:

<h1>{{$product->name}}</h1>
 
<p>{{$product->description}}</p>

Tendremos accesible desde http://localhost/product/<ID>

Vamos a hacer el edit():

public function edit(Product $product) {
    return view("product.edit", compact("product");
}

Creamos una vista edit.blade.php:

<form action="{{route("product.update", $product->id}}" method="post">
    @csrf
    @method("put")
    <input type="text" name="name" value="{{$product->name}}">
    <input type="text" name="description" value="{{$product->description}}">
    <input type="submit" value="enviar">
// ...
</form>                

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");
<h1>Listado de productos</h1>
<ul>
    @foreach($productsList as $product)
        <li>
            <p>Nombre: {{$product->name}}</p>
            <p><a href="{{route('product.destroy', $product->id}}">delete</a></p>
        </li>
    @endforeach
</ul>    

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.

informatica/programacion/php/cursos/laravel_8/20250601.txt · Última modificación: por tempwin