Framework: Laravel
Contents
Framework: Laravel#

Documentación básica para trabajar con Laravel 5 .. contents:: Índice
Configuraciones#
Creación del proyecto#
Instalar laravel vía composer:
composer create-project laravel/laravel proyecto-laravel "5.6.*" --prefer-dist
Probar que está funcionando:
php -S localhost:8000 -t public/
Nota
Dentro de Public se encuentra el archivo principal de la aplicación, es donde debe apuntar el servidor.
Atención
Es necesario tener Composer instalado: https://getcomposer.org/download/
Atención
Es importante tener instalado PHP o en su defecto un servidor Lamp o Xamp
Atención
Es posible que no se ejecute el proyecto correctamente en el servidor, si es así
ejecutamos composer install
para solventar dependencias. También pueden faltar
paquetes de php en linux, se instalan sudo apt install php-mbstring
y sudo apt install php-xml
.
Se vuelve a ejecutar composer install
y no debería de dar errores.
Estructura de Laravel#
En la estructura de un proyecto Laravel estas son las partes más importantes:
- app: directorio con el contenido principal de Laravel y la aplicación.
http: contiene los modelos por ejemplo.
bootstrap: Contiene un archivo que inicia el framework y la caché.
config: contiene archivos de configuración de la aplicación.
database: contiene lo relacionado con las migraciones de la base de datos.
public: contiene archivos públicos como los assets o el index
resources: es donde se encuentran las vistas de la aplicación.
routes: contiene las rutas de la aplicación.
storage: almacenará archivos a subir.
tests: carpeta con los test de la explicación.
vendor: guarda todos los paquetes y librerías instalados con composer.
artisan: permite ejecutar comandos cli de Laravel.
.env: es donde se configura la conexión a la base de datos entre otros.
Comandos Artisan#
Laravel tiene una lista de comandos con Artisan los cuales se destacan:
Listar rutas:
php artisan route:list
Crear controlador:
php artisan make:controller NuevoController
Crear controlador con CRUD:
php artisan make:controller UserController --resource
Crear una migración:
php artisan make:migration create_consolas_table --table=lista_consolas
Desplegar migración:
php artisan migrate
Refrescar migraciones:
php artisan migrate:refresh
Crear un seeder:
php artisan make:seed lista_consolas_seed
Lanzar un seeder:
php artisan db:seed --class=lista_consolas_seed
Configurar conexión a base de datos#
Para configurar la base de datos se edita el archivo .env y se añade los datos de configuración de nuestra base de datos:
1DB_CONNECTION=mysql
2DB_HOST=127.0.0.1
3DB_PORT=3306
4DB_DATABASE=consolas
5DB_USERNAME=guillermo
6DB_PASSWORD=1234
Nota
El archivo de configuración también puede configurar correos y bases de datos redis.
Rutas en Laravel#
Las rutas en Laravel las podemos encontrar dentro de la carpetas routes en el archivo web.php
Ejemplo de ruta:
1<?php
2
3/*
4|--------------------------------------------------------------------------
5| Web Routes
6|--------------------------------------------------------------------------
7|
8| Here is where you can register web routes for your application. These
9| routes are loaded by the RouteServiceProvider within a group which
10| contains the "web" middleware group. Now create something great!
11|
12*/
13
14// Definición de la ruta raiz:
15Route::get('/', function () {
16 // retornar una vista:
17 return view('welcome');
18});
Rutas sencillas#
Las rutas utilizan los siguientes métodos:
GET: recuperar información
POST: Enviar información
PUT: Actualizar datos
DELETE: Eliminar datos
Ejemplo de como cargar una vista en una ruta:
1<?php
2
3/*
4|--------------------------------------------------------------------------
5| Web Routes
6|--------------------------------------------------------------------------
7|
8| Here is where you can register web routes for your application. These
9| routes are loaded by the RouteServiceProvider within a group which
10| contains the "web" middleware group. Now create something great!
11|
12*/
13
14// Definición de la ruta raiz:
15Route::get('/', function () {
16 // retornar una vista:
17 return view('welcome');
18});
19
20
21Route::get('/prueba', function(){
22 // variables que se pueden asignar al callback:
23 $saludo = "Hola con Laravel";
24
25 // la función view puede recibir un array con datos que mostrará en la plantilla:
26 return view('prueba', array(
27 'saludo' => $saludo
28 ));
29});
30
31Route::get('/prueba', function(){
32 // variables que se pueden asignar al callback:
33 $saludo = "Hola con Laravel";
34
35 // otro modo de cargar valores a la vista es con with:
36 return view('prueba')
37 ->with('saludo', $saludo); // pueden haber tantos with como hagan falta.
38});
Rutas con parámetros#
1<?php
2
3/*
4|--------------------------------------------------------------------------
5| Web Routes
6|--------------------------------------------------------------------------
7|
8| Here is where you can register web routes for your application. These
9| routes are loaded by the RouteServiceProvider within a group which
10| contains the "web" middleware group. Now create something great!
11|
12*/
13
14Route::get('/', function () {
15 return view('welcome');
16});
17
18// la ruta recibe el parámetro nombre y este se debe pasar a la función callback:
19Route::get('/saludar/{nombre}', function($nombre){
20 return "<h2>Hola " . $nombre . "</h2>";
21});
22
23// con ? se define parametro opcional pero hay que definir valor por defecto en el parámetro del callback:
24Route::get('/edad/{edad?}', function($edad = "desconocida"){
25 return "<h2>Hola, tu edad es: " . $edad . "</h2>";
26});
Condiciones en las rutas#
Las rutas en Laravel pueden recibir condiciones gracias a la función where:
1<?php
2
3/*
4|--------------------------------------------------------------------------
5| Web Routes
6|--------------------------------------------------------------------------
7|
8| Here is where you can register web routes for your application. These
9| routes are loaded by the RouteServiceProvider within a group which
10| contains the "web" middleware group. Now create something great!
11|
12*/
13
14Route::get('/', function () {
15 return view('welcome');
16});
17
18
19Route::get('/edad/{edad?}', function($edad = "desconocida"){
20 return "<h2>Hola, tu edad es: " . $edad . "</h2>";
21})->where(array( // con expresiones regulares se pueden filtrar los parámetros:
22 'edad' => '[0-9]+'
23));
Atención
Si se añade más condiciones y son parámetros obligatorios estos deberán cumplirse.
Cargar metodo de controlador en rutas#
Lo lógico y más común es devolver un controlador que ya se encargará de toda la lógica que va a llevar la vista:
1// La ruta recibe como segundo parámetro el controlador y tras la @ el método que ejecutar:
2Route::get('/consolas', 'ConsolaController@index');
Colecciones de rutas#
Se pueden crear prefijos para ordenar las rutas que van dentro de un CRUD:
1Route::group(['prefix'=>'consolas'], function(){
2 Route::get('index', 'ConsolasController@index');
3 Route::get('listar', 'ConsolasController@listar');
4});
Middlewares#
Los middlewares son filtros en Laravel, existen ya algunos definidos por defecto:
Crear middleware:
php artisan make:middleware CheckConsola
El middelware se puede editar dentro de Http/middleware:
1<?php
2
3namespace App\Http\Middleware;
4
5use Closure;
6
7class CheckConsola
8{
9 /**
10 * Handle an incoming request.
11 *
12 * @param \Illuminate\Http\Request $request
13 * @param \Closure $next
14 * @return mixed
15 */
16 public function handle($request, Closure $next)
17 {
18 // se va a filtrar el parámetro modelo:
19 $modelo = $request->route('modelo');
20
21 // si el modelo no es el que tenemos disponible:
22 if(is_null($modelo) || $modelo != 'playstation'){
23 // redirecciona al listado:
24 return redirect()->action('ConsolaController@index');
25 }
26
27 return $next($request);
28 }
29}
Hay que dar de alta el middleware en Http/kernel.php añadidendo una nueva línea dentro del array $routeMiddleware:
'checkconsola' => \App\Http\Middleware\CheckConsola::class,
Ahora en las rutas de webs.php se define el middelware:
1// añadir el middleware:
2Route::get('/consola/{modelo?}', array(
3 'middleware' => 'checkconsola',
4 'uses' => 'ConsolaController@consola'
5));
De este modo, el middleware cuando reciba por parámetros una consola que no sea playstation hará un redireccionamiento al listado.
Vistas en Laravel (plantillas Blade)#
Las vistas están en formato blade y las podemos encontrar en resources/views/. Su nomenclatura se define por terminar en .blade.php para hacer referencia que son plantillas blade.
A la hora de trabajar con vistas es bueno crear una carpeta dentro de views llamada consolas, dentro de esta carpeta se pueden crear todas las vistas relacionadas con las consolas, por ejemplo listar-consolas.blade.php:
1<h1>Listado de consolas</h1>
2
3<ul>
4 <li>Sony PlayStation</li>
5 <li>Sega Megadrive</li>
6 <li>Nintendo DS</li>
7</ul>
La ruta para cargar esta vista que se encuentra dentro de una carpeta sería la siguiente:
1Route::get('/consolas', function(){
2 // con el . se indica una ruta de carpetas en views:
3 return view('consolas.listar-consolas');
4});
Uso de variables#
Las variables se pueden cargar desde el controlador con el uso de dobles llaves {{ $variable }}:
1<h1>{{ $titulo }}</h1>
2
3<ul>
4 <li>Sony PlayStation</li>
5 <li>Sega Megadrive</li>
6 <li>Nintendo DS</li>
7</ul>
Nota
Para añadir comentarios en Blade se usa la sintaxis: {! Comentario !}, a diferencia de los comentarios html, los comentarios blade no se muestran en el código HTML ya que queda a nivel backend.
Condicional if#
Las condiciones if se ejecutan con el tag @if, @else, @endif:
1<h1>{{ $titulo }}</h1>
2
3{! Se crea la condición que se valida entre paréntesis igual que un if corriente !}
4@if($consolas)
5 <ul>
6 <li>Sony PlayStation</li>
7 <li>Sega Megadrive</li>
8 <li>Nintendo DS</li>
9 </ul>
10@else
11 <p>No hay consolas disponibles</p>
12@endif
Bucle foreach#
Los bucles for se ejecutan con el tag @foreach:
1<h1>{{ $titulo }}</h1>
2
3<ul>
4@foreach($consola as $consolas)
5 <li>{{ $consolas }}</li>
6@endforeach
7</ul>
Nota
Se puede ejecutar el foreach clave => valor de un mismo modo que en PHP.
Nota
Existe del mismo modo el bucle for sencillo y el bucle while, sin embargo este tipo de estructuras es mejor utilizarlas en los controladores.
Plantilla Base#
Las plantillas base como en otros frameworks se utilizan para establecer las partes que serán genéricas en todas o la gran mayoría de páginas del proyecto, estas plantillas se suelen guardar en la carpeta layouts la cual habrá que crear dentro de views.
La plantilla base suele tener el nombre base.blade.php:
1<!DOCTYPE html>
2<html lang="es">
3<head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 {{-- es muy útil el uso de Yield para sustituir partes estratégicas: --}}
8 <title>@yield('title')</title>
9</head>
10<body>
11 {{-- Cada section muestra un bloque de contenido: --}}
12 @section('header')
13 <h1>Listado de consolas</h1>
14 @show
15
16 <div>
17 {{-- con yield se define el contenido a sustituir --}}
18 @yield('content')
19 </div>
20
21 @section('footer')
22 <small>Laravel en Fullcoder</small>
23 @show
24</body>
25</html>
Lo siguiente será cargar la base en una plantilla como listar-consolas.blade.php:
1{{-- Ahora se extiende la plantilla base: --}}
2@extends('layouts.base')
3
4{{-- Se reemplaza el title del sitio: --}}
5@section('title', 'Listado de consolas:')
6
7{{-- Se carga el section para sustituir el yield content con el listado de consolas: --}}
8@section('content')
9<ul>
10 <li>Sony PlayStation</li>
11 <li>Sega Megadrive</li>
12 <li>Nintendo DS</li>
13</ul>
14@stop
15
16{{-- se puede añadir o cambiar el comportamiento de un bloque: --}}
17@section('footer')
18 <p>Parte exclusiva en el footer de Listado de consolas</p>
19 {{-- si se añade parent heredará el contenido original, sino sustituye el bloque completo --}}
20 @parent
21@stop
Includes#
Se puede cargar otras vistas por ejemplo creando en la carpeta views una carpeta llamada includes y dentro se puede crear por ejemplo header.blade.php:
1<h1>Soy una cabezera</h1>
2<hr>
Para cargar dicho header se accede a una plantilla blade como consolas.blade.php:
1{! esta cabezera se puede añadir tantas veces como haga falta: !}
2@include('includes.header')
3
4<h1>Listado de consolas</h1>
5
6<ul>
7 <li>Sony PlayStation</li>
8 <li>Sega Megadrive</li>
9 <li>Nintendo DS</li>
10</ul>
Enlaces a otras rutas#
1{{-- Con action se llama al metodo del controlador para crear el enlace: --}}
2<a href="{{ action('ConsolaController@index') }}">Listado de consolas</a>
Nota
Existe también el método route() pero para ello hay que definir un alias a la ruta.
Mostrar notificaciones#
Tenemos el caso en el que se elimina un registro:
1public function borrarConsola($id){
2 $consola = DB::table('lista_consolas')->where('id', $id)->delete();
3 // se utiliza with para guardar datos en una sesión flash, osea que solo aparecerá 1 vez ideal para notificaciones:
4 return redirect()->action('ConsolaController@index')->with('status', 'Consola eliminada con éxito');
5}
En la vista se puede utilizar las sesiones para cargar el status que hemos creado:
1@extends('layouts.base')
2
3@section('title', 'Listado de consolas:')
4
5@section('content')
6<ul>
7 @foreach($consolas as $consola)
8 <li>{{ $consola->marca }}</li>
9 @endforeach
10</ul>
11@stop
12
13@section('footer')
14 <p>Parte exclusiva en el footer de Listado de consolas</p>
15 @parent
16@stop
17
18{{-- Con blade se muestran los datos almacenados en sesión via with: --}}
19@if(session('status'))
20 <h3 style="color:red;">{{ session('status') }}</h3>
21@endif
Controladores en Laravel#
Crear controlador:
php artisan make:controller ConsolaController
Acceder al archivo del controlador en Http/Controllers:
1<?php
2
3// se crea un namespace para poder llamar al controlador:
4namespace App\Http\Controllers;
5
6// se recupera el request para las peticiones http:
7use Illuminate\Http\Request;
8
9// se genera una clase vacía que hereda de controller:
10class ConsolaController extends Controller
11{
12 // crear una vista principal que devuelva el listado de consolas:
13 public function index(){
14 // tendrá un array de consolas:
15 $consolas = ['Sony Playstation', 'Sega Megadrive', 'Gameboy'];
16
17 // se retorna una vista:
18 return view('consolas.listar-consolas', array(
19 'consolas' => $consolas
20 ));
21 }
22}
Ahora se llama al controlador desde las rutas:
1// La ruta recibe como segundo parámetro el controlador y tras la @ el método que ejecutar:
2Route::get('/consolas', 'ConsolaController@index');
Nota
La vista ahora se puede recorrer el valor con foreach para cargar las consolas en un listado.
Manejar parámetros en el controlador#
1<?php
2
3namespace App\Http\Controllers;
4
5use Illuminate\Http\Request;
6
7class ConsolaController extends Controller
8{
9 // el método recibirá cada parámetro de la ruta con su nombre:
10 public function consola($modelo){
11 // listado de consolas:
12 $consolasDetalle = [
13 'playstation' => array(
14 'marca' => 'Sony',
15 'modelo' => 'Playstation',
16 'lanzamiento' => 1994
17 )
18 ];
19
20 // dudoso modo de validar el índice:
21 $modelo = $modelo ? $consolasDetalle[$modelo] : Null;
22
23 // respuesta:
24 return view('consolas.consola', array(
25 'consola' => $modelo
26 ));
27 }
28}
Redirección a otra ruta#
1public function volver(){
2 // se le pasa el método redirect y el método del controlador que va a disparar la acción:
3 return redirect()->action('ConsolaController@index')
4}
Crear Crud y enrutamiento automático#
Con Artisan se puede crear un CRUD completo y recuperar todas sus rutas de manera automática:
Crear controlador con CRUD:
php artisan make:controller UserController --resource
Crear ruta con método resources():
1// ruta de un CRUD completo:
2Route::resource('user', 'UserController');
Comprobar que existen las rutas nuevas:
php artisan routes:list
Y con esto ya existen todos los métodos de un CRUD. Muy útil para crear servicios REST.
Formularios#
Crear un formulario en blade:
1<h1>Formulario registro consola</h1>
2
3<form action="{{ action('ConsolaController@nuevaConsola') }}" method="POST">
4 {{-- es imprescindible enviar el csrf para evitar fallos: --}}
5 {{ csrf_field() }}
6 <label for="marca">Marca: </label>
7 <input type="text" name="marca" />
8 <label for="modelo">Modelo: </label>
9 <input type="text" name="modelo" />
10 <label for="lanzamiento">Lanzamiento: </label>
11 <input type="text" name="lanzamiento" />
12
13 <input type="submit" value="registrar" />
14</form>
Crear las rutas que muestran el formulario y la que recibe los datos:
1// rutas para el formulario:
2Route::get('/consolas/nueva', 'ConsolaController@nuevaConsola');
3Route::post('/consolas/nueva', 'ConsolaController@nuevaConsola');
Crear un nuevo método en el controlador ConsolaController para mostrar formulario:
1public function nuevaConsola(Request $request){
2 $response = view('consolas.nuevaConsola');
3
4
5 $marca = $request->input('marca');
6 $modelo = $request->input('modelo');
7 $lanzamiento = $request->input('lanzamiento');
8
9 if($request->input('marca') && $request->input('modelo') && $request->input('lanzamiento')){
10 $response = $marca . " " . $modelo . " fue lanzada en " . $lanzamiento;
11 }
12
13 return $response;
14}
Con este controlador se ha establecido la validación cuando reciba todos los datos mostrará una respuesta.
Bases de datos#
Migraciones#
Crear una nueva migración:
php artisan make:migration create_consolas_table --table=lista_consolas
Las migraciones se encuentra en database/migrations/ ahí se puede ver el archivo create_consolas_table:
1<?php
2
3use Illuminate\Support\Facades\Schema;
4use Illuminate\Database\Schema\Blueprint;
5use Illuminate\Database\Migrations\Migration;
6
7class CreateConsolasTable extends Migration
8{
9 /**
10 * Run the migrations.
11 *
12 * @return void
13 */
14 public function up() // up crea la tabla
15 { // se cambia el schema table por create para crear la tabla o fallará ya que no existe la tabla en mysql:
16 Schema::create('lista_consolas', function (Blueprint $table) {
17 // Se definen los campos:
18 $table->increments('id'); // el tipo increments será autoincremental y por defecto primary key.
19 $table->string('marca', 255);
20 $table->string('modelo', 255);
21 $table->integer('lanzamiento');
22 // buena practica es crear un timestamps para registrar cambios en los datos:
23 $table->timestamps();
24 });
25 }
26
27 /**
28 * Reverse the migrations.
29 *
30 * @return void
31 */
32 public function down() // borra la tabla
33 {
34 // se define el drop para eliminar la tabla:
35 Schema::drop('lista_consolas');
36 }
37}
Lanzar todas la migraciones:
php artisan migrate
Refrescar los cambios en las migraciones:
php artisan migrate:refresh
Atención
Es necesario tener configurado el archivo .env para conectarse a la base de datos.
Atención
Al refrescar las tablas se borran los registros.
Generar Seeders#
Los seeders se utilizan para rellenar datos de prueba en una aplicación:
Lo primero es ejecutar el comando:
php artisan make:seed lista_consolas_seed
En la carpeta database/seeds/ se ha creado el archivo lista_consolas_seed.php:
1<?php
2
3use Illuminate\Database\Seeder;
4
5class lista_consolas_seed extends Seeder
6{
7 /**
8 * Run the database seeds.
9 *
10 * @return void
11 */
12 public function run()
13 {
14 // crear registros:
15 $consolas = [
16 array(
17 'marca' => 'Sega',
18 'modelo' => 'Dreamcast',
19 'lanzamiento' => 1998,
20 'n_ventas' => 2000000
21 ),
22 array(
23 'marca' => 'Nintendo',
24 'modelo' => 'WiiU',
25 'lanzamiento' => 2015,
26 'n_ventas' => 11000
27 )
28 ];
29
30 // aquí se ejecuta la consulta que va a introducir en la base de datos una vez ejecutemos el seed:
31 DB::table('lista_consolas')->insert($consolas);
32
33 // lanzamos un mensaje por consola:
34 $this->command->info('Se ha rellenado la tabla de lista_consolas');
35 }
36}
Ahora para lanzar el seed y que guarde los registros:
php artisan db:seed --class=lista_consolas_seed
Atención
En caso de que indique un error de tipo no se encuentra la clase lista_consolas_seed.php habrá que ejecutar el comando composer dump-autoload
para solucionar el problema.
Relaciones de tablas y tablas ya existentes#
Aparte de las relaciones entre tablas veremos como tener un modelo que trabaja con una tabla que se creó desde mysql:
Tabla con relación de uno a muchos (Category):
1<?php
2
3namespace App\Models;
4
5use Illuminate\Database\Eloquent\Factories\HasFactory;
6use Illuminate\Database\Eloquent\Model;
7
8class Category extends Model
9{
10 use HasFactory;
11 // tabla creada en mysql:
12 protected $table = 'categories';
13
14 // relación de uno a muchos:
15 public function posts(){
16 return $this->hasMany('App\Post');
17 }
18}
Tabla con relación inversa (Post):
1<?php
2
3namespace App\Models;
4
5use Illuminate\Database\Eloquent\Factories\HasFactory;
6use Illuminate\Database\Eloquent\Model;
7
8class Post extends Model
9{
10 use HasFactory;
11 // tabla creada en mysql:
12 protected $table = 'posts';
13
14 // relación de uno a muchos inversa (muchos a uno):
15 public function user(){
16 return $this->belongsTo('App\Models\User', 'user_id');
17 }
18
19 public function category(){
20 return $this->belongsTo('App\Models\Category', 'category_id');
21 }
22}
Query Builder Laravel#
Consultar datos#
1public function index(){
2
3 // consulta para listar datos:
4 $consolas = DB::table('lista_consolas')->get();
5 // recuperar solo registros concretos:
6 $consolas = DB::table('lista_consolas')->where('marca', '=', 'Sega')->get();
7 // ordenar registros:
8 $consolas = DB::table('lista_consolas')->orderBy('modelo', 'desc')->get();
9
10
11 return view('consolas.listar-consolas', array(
12 'consolas' => $consolas
13 ));
14 }
15
16public function consola($id){
17 // buscar un registro:
18 $consola = DB::table('lista_consolas')->where('id', '=', $id)->first();
19
20 // respuesta:
21 return view('consolas.consola', array(
22 'consola' => $consola
23 ));
24}
Insertar datos#
1public function nuevaConsola(Request $request){
2 $response = view('consolas.nuevaConsola');
3
4
5 $marca = $request->input('marca');
6 $modelo = $request->input('modelo');
7 $lanzamiento = $request->input('lanzamiento');
8 $ventas = 0;
9
10 if($marca && $modelo && $lanzamiento){
11 // guardar registro:
12 $consola = DB::table('lista_consolas')->insert(array(
13 'marca' => $marca,
14 'modelo' => $modelo,
15 'lanzamiento' => $lanzamiento,
16 'n_ventas' => $ventas
17 ));
18
19 $response = redirect()->action('ConsolaController@index');
20 }
21
22 return $response;
23}
Borrar registros#
1public function borrarConsola($id){
2 // consulta para borrar registro:
3 $consola = DB::table('lista_consolas')->where('id', $id)->delete();
4
5 return redirect()->action('ConsolaController@index')->with('status', 'Consola eliminada con éxito');
6}
En la vista se puede utilizar las sesiones para cargar el status que hemos creado:
1@extends('layouts.base')
2
3@section('title', 'Listado de consolas:')
4
5@section('content')
6<ul>
7 @foreach($consolas as $consola)
8 <li>{{ $consola->marca }}</li>
9 @endforeach
10</ul>
11@stop
12
13@section('footer')
14 <p>Parte exclusiva en el footer de Listado de consolas</p>
15 @parent
16@stop
17
18{{-- Con blade se muestran los datos almacenados en sesión via with: --}}
19@if(session('status'))
20 <h3>{{ session('status') }}</h3>
21@endif
Actualizar registros#
1public function editarConsola($id, Request $request){
2
3 // primero se recupera el registro:
4
5
6 if ($request->isMethod('post'))
7 {
8 $consola = DB::table('lista_consolas')->where('id', $id)->update(array(
9 'marca' => $request->input('marca'),
10 'modelo' => $request->input('modelo'),
11 'lanzamiento' => $request->input('lanzamiento'),
12 'n_ventas' => 0
13 ));
14 $response = redirect()->action('ConsolaController@consola', $id);
15
16 }else{
17 $consola = DB::table('lista_consolas')->where('id', $id)->first();
18 $response = view('consolas.nuevaConsola', array(
19 'consola' => $consola
20 ));
21 }
22
23 return $response;
24}
Se puede readaptar el formulario para que muestre los datos y alterne la respuesta:
1<h1>Formulario registro consola</h1>
2
3<!-- Se establece un ternario para preguntar si recibe algun dato del controlador cambiar a edición -->
4<form action="{{ isset($consola) ? action('ConsolaController@editarConsola', $consola->id) : action('ConsolaController@nuevaConsola') }}" method="POST">
5 {{ csrf_field() }}
6 <label for="marca">Marca: </label> <!-- con or podemos decidir si hay algo o sino valor por defecto -->
7 <input type="text" name="marca" value="{{ $consola->marca or '' }}" />
8 <label for="modelo">Modelo: </label>
9 <input type="text" name="modelo" value="{{ $consola->modelo or '' }}" />
10 <label for="lanzamiento">Lanzamiento: </label>
11 <input type="text" name="lanzamiento" value="{{ $consola->lanzamiento or '' }}"/>
12
13 <input type="submit" value="registrar" />
14</form>