Herramientas de usuario

Herramientas del sitio


informatica:programacion:php:cursos:laravel_8:20250601

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
informatica:programacion:php:cursos:laravel_8:20250601 [2023/06/01 13:25] – creado tempwininformatica:programacion:php:cursos:laravel_8:20250601 [2023/06/01 15:11] (actual) tempwin
Línea 5: Línea 5:
 Terminología:  Terminología: 
  
-  * trac factor+  * **Test de caracterización**: hacer tests sobre código ya hecho.
  
 Jornada de charla. 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'':
 +
 +<code php>
 +public function show(Product $product) {
 +
 +    return view("product.view", compact("product"));
 +
 +}
 +</code>
 +
 +<WRAP center round info 60%>
 +''[[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.
 +</WRAP>
 +
 +
 +Creamos una vista ''view.blade.php'':
 +
 +<code html>
 +<h1>{{$product->name}}</h1>
 +
 +<p>{{$product->description}}</p>
 +</code>
 +
 +Tendremos accesible desde http://localhost/product/<ID>
 +
 +Vamos a hacer el ''edit()'':
 +
 +<code php>
 +public function edit(Product $product) {
 +    return view("product.edit", compact("product");
 +}
 +</code>
 +
 +Creamos una vista ''edit.blade.php'':
 +
 +<code html>
 +<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>                
 +</code>
 +
 +http://localhost/product/4/edit
 +
 +Vamos a hacer el ''update()'':
 +
 +<code php>
 +public function update(UpdateProductRequest $request, Product $product) {
 +    $product->update($request->all());
 +    return redirect(route("product.index"));
 +}
 +</code>
 +
 +
 +
 +Ahora vamos a hacer ''destroy()'':
 +
 +<code php>
 +public function destroy(Product $product) {
 +
 +    $product->delete();
 +    return \redirect(route("product.index")); // ¿por qué la barra invertida?
 +
 +}
 +</code>
 +
 +<WRAP center round important 60%>
 +Falta hacer cambios en la vista para añadir un "botón" para borrar
 +</WRAP>
 +
 +
 +En el fichero ''web.php'':
 +
 +<code 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");
 +</code>
 +
 +<code html>
 +<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>    
 +</code>
 +
 +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''
 +
 +<WRAP center round info 60%>
 +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''.
 +</WRAP>
 +
 +
 +
 +<code php>
 +namespace App\Domain\Contracts;
 +
 +interface IProductRepository {
 +
 +    public function getAllProducts();
 +    
 +}
 +</code>
 +
 +El repositorio lo creamos en ''app/Infraestructure/'' y creamos la carpeta ''Repositories'' donde crearemos el fichero ''EloquentProductRepository.php'':
 +
 +<code php>
 +namespace App\Infraestructure\Repositories;
 +
 +use App\Domain\Contracts\IProductRepository;
 +use App\Models\Product;
 +
 +class EloquentProductRepository immplements IProductRepository {
 +
 +    public function getAllProducts() {
 +        Product::all();
 +    }
 +
 +}
 +
 +</code>
 +
 +
 +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.1685618755.txt.gz · Última modificación: por tempwin