PHP Modelo - Vista - Controlador
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:
- 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
- Creamos a ruta. Máis información en este enlace.
- 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 á a 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.