Diferencia entre revisiones de «PHP Modelo - Vista - Controlador»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Etiqueta: Reemplazo
Línea 32: Línea 32:
 
* '''Creamos a ruta.''' Máis información [https://laravel.com/docs/10.x/routing en este enlace].
 
* '''Creamos a ruta.''' Máis información [https://laravel.com/docs/10.x/routing en este enlace].
 
:'''Arquivo: /app/routes/web.php'''
 
:'''Arquivo: /app/routes/web.php'''
−
::<syntaxhighlight lang="java" enclose="div" highlight="4,7" >
+
::<syntaxhighlight lang="java" enclose="div" highlight="5,8" >
 
<?php
 
<?php
  
Línea 48: Línea 48:
 
: Ao darlle un nome á ruta (pode ser calquera nome, non ten porque coincidir coa ruta, pero desta forma é mais doado de acordarse) poderemos empregar dito nome para dende as vistas referenciar a ruta da forma Route('nome_ruta') ou cando facemos redirección dende o controlador (xa o veremos).
 
: Ao darlle un nome á ruta (pode ser calquera nome, non ten porque coincidir coa ruta, pero desta forma é mais doado de acordarse) poderemos empregar dito nome para dende as vistas referenciar a ruta da forma Route('nome_ruta') ou cando facemos redirección dende o controlador (xa o veremos).
  
−
: Podemos engadir unha entrada '''resource''' no arquivo de rutas sustituindo á a anterior:
+
: Podemos engadir unha entrada '''resource''' no arquivo de rutas sustituindo á anterior:
 
::<syntaxhighlight lang="java" enclose="div" highlight="" >
 
::<syntaxhighlight lang="java" enclose="div" highlight="" >
−
::Route::resource('perfumes', PerfumeController::class);
+
Route::resource('perfumes', PerfumeController::class);
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Revisión del 09:21 3 abr 2025

Listado de perfumes

  • Dende unha vista imos listar todos os perfumes que teña a base de datos e dentro da mesma imos ter as opcións de alta, baixa e modificación de novos perfumes.
A pantalla terá este aspecto:
Php laravel acceso datos ex1 1.jpg
Como podemos observar dispoñemos:
  • Na parte esquerda dun menú coa opción 'Operacións Perfumes' que carga a páxina que se ve na imaxe.
  • Na parte dos datos, temos un enlace que permite crear un novo perfume e despois na lista de perfumes, a carón de cada un deles, temos a opción de modificar ou eliminar un perfume.


  • Creamos o controlador


  • Podemos emplear este comando: php artisan make:controller PerfumeController --resource para crear unos métodos 'estándares' aplicadas a un modelo.
Los métodos que se crean en el controlador serán:
  • index(): Mostrar unha lista de todos os rexistros.
  • create(): Mostrar un formulario para crear un novo rexistro.
  • store(): Gardar o novo rexistro na base de datos.
  • show(): Amosar un rexistro específico.
  • edit(): Amosar un formulario para editar un rexistro existente.
  • update(): Actualizar un rexistro específico na base de datos. Tería como entrada os datos do formulario amosados en edit.
  • destroy(): Eliminar un rexistro específico.
  • Se non queremos crealos podemos empregar a orde: php artisan make:controller PerfumeController e definir nos o nome dos métodos.
  • O comando anterior crea o arquivo: : /app/Http/Controller/PerfumeController.php



Arquivo: /app/routes/web.php
<?php

use Illuminate\Support\Facades\Route;

use app\Http\Controllers\PerfumeController;


Route::get('/perfumes','PerfumeController@index')->name('perfumes.listar');


Como vemos, cando na url escribamos http://dominio/perfumes (en probas sería: http://localhost:8000/perfumes) e prememos a tecla enter (acción get) se chamará ao método index do controlador PerfumeController.
Ao darlle un nome á ruta (pode ser calquera nome, non ten porque coincidir coa ruta, pero desta forma é mais doado de acordarse) poderemos empregar dito nome para dende as vistas referenciar a ruta da forma Route('nome_ruta') ou cando facemos redirección dende o controlador (xa o veremos).
Podemos engadir unha entrada resource no arquivo de rutas sustituindo á anterior:
Route::resource('perfumes', PerfumeController::class);


Se executades o comando dende o terminal: php artisan route:list podedes comprobar como se crearon todas as rutas necesarias para xestionar a táboa Perfume (listado , alta, baixa, modificación e detalle).
Imos empregar esta forma pero lembrar que se fan 'manualmente'. De forma manual podemos poñer o verbo que queiramos (post, delete,...) e enviar parámetros na url da forma http://url/parametro1.





Modificamos agora o controlador para que cargue a vista.

Arquivo: /app/Http/Controller/PerfumeController.php
 1 <?php
 2 
 3 namespace App\Http\Controllers;
 4 
 5 use Illuminate\Http\Request;
 6 
 7 use App\Http\Requests;
 8 use App\Perfume;
 9 
10 class PerfumeController extends Controller
11 {
12    .......
13 
14     public function index()
15     {
16         $perfumes = Perfume::orderBy('descripcion')->get();
17         return view('perfumes.operacions_perfumes')
18                 ->with(['perfumes'=>$perfumes]);
19     }
20 
21 
22 }
Como vemos, estamos chamando á vista operacions_perfumes dentro dun cartafol 'perfumes' creado en views. Mandamos como parámetro a lista de perfumes da base de datos ordenados polo campo descripción.


  • Creamos a vista:

Arquivo /resource/views/perfumes/operacions_perfumes.blade.php

Nota: Creamos un cartafol dentro de /resources/views/perfumes
 1 @extends('plantilla')
 2 
 3 @section('pageTitle', 'Lista de Perfumes')
 4 @section('content')
 5 
 6 <div>
 7 <a href="/perfumes/alta" >NOVO PERFUME</a>    
 8 </div>
 9 
10 <h5>Hai {{$perfumes->count()}} perfumes en la base de datos.</h5>
11 
12 <table>
13     <tr>
14         <th>Descripción</th>
15         <th>Prezo</th>
16         <th>Data compra</th>
17         <th>Operaciones</th>
18     </tr>
19     @foreach($perfumes as $perfume)
20         <tr>
21             <td>{{$perfume->descripcion}}</td>
22             <td>{{number_format($perfume->prezo,2,',','')}}</td>
23             <td>{{$perfume->data_compra ? $perfume->data_compra->format('d/m/Y'): ''}}</td>
24             <td><a href="/perfumes/{{$perfume->id_perfume}}/edit" >Modificar</a> <a onclick="return confirm('Estás seguro de eliminar o perfume {{$perfume->descripcion}} ?');" href="/perfumes/{{$perfume->id_perfume}}/delete" >Eliminar</a></td>
25         </tr>
26     @endforeach
27 
28 </table>
29 
30 
31 @if(session()->has('msg')) 
32     <h3>{{session('msg')}}</h3>
33 @endif
34 
35 @endsection
  • Liña 7: Facemos un enlace á ruta /perfumes/alta a cal cargará a vista que amosa o formulario de alta dun novo perfume.
  • Liña 10: Chamamos a función count() da clase Collect para amosar o número de rexistros atopados na base de datos.
  • Liña 19: Percorremos cada un dos perfumes da colección.
  • Liña 22: O prezo é un decimal en Mysql e se garda có punto como separación dos números decimais. O que facemos é substituír o punto por unha coma.
  • Liña 23: O data de compra é un campo opcional, polo que pode vir cun valor nulo. Nese caso, a chamada á función format provocaría unha excepción polo que preguntamos utilizando o operador ternario se ten dato. En caso de que non teña amosamos a cadea baleira.
  • Liña 24: Temos dous enlaces para as operacións de actualización e baixa: /perfumes/id_perfume/edit => cargará a vista que actualiza e /perfumes/id_perfume/delete => borra o perfume.