Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/JetstreamInertia»

De WikiEducator
Saltar a: navegación, buscar
(Servidor)
(Servidor)
Línea 129: Línea 129:
 
</source>.  
 
</source>.  
 
}}
 
}}
 +
{{MRM_Actividad|Title=2.-Creamos vistas js con vue. |
 +
*Ahora vamos a crear vistas para cargar.
 +
*El proceso de ruteo lo gestiona laravel '''''web.php'''''
 +
*La carga de las vistas las hará larevel con la facade '''''render'''''
 +
*Vemos un ejemplo:
 +
 +
*1.-'''''El ruteo en web.php'''''
 +
<source lang=php>
 +
 +
</source>
 +
*2.- '''''El controlador '''''
 +
*Creamos un controlador llamado por ejemplo '''''ControlerPpal''''
 +
<source lang=php>
 +
php artisan make:controller ControllerPpal
 +
 +
</source>
 +
*3.- '''''La vista'''''
  
 
=====Cliente=====
 
=====Cliente=====
  
 
====Cliente====
 
====Cliente====

Revisión de 06:05 6 ago 2021

https://inertiajs.com/

Qué es Inertia

  • Una librería para construir una aplicación web gestionada desde el servidor. Se le conoce como modern monolith. Se puede usar además de con Laravel con otras herramientas (DJango, Rail, Ruby,...)
  • Inertia le permite crear una aplicación de una sola página completamente basada en JavaScript sin complejidad adicional.
  • Inertia funciona mucho más como una aplicación clásica renderizada del lado del servidor:
  1. Creas controladores
  2. Obtienes datos de la base de datos (a través de tu ORM)
  3. Renderizas vistas.que son componentes de página de JavaScript.

Cómo trabaja

  • Trabajando con Inertia, vamos a usar el framework del servidor como siempre. En nuestro caso seguimos usando laravel con sus controladores, rutas, authetificadores , ...
  • Inertia es esencialmente una biblioteca de enrutamiento del lado del cliente. Le permite realizar visitas a la página sin forzar una recarga completa de la página.

Para ver una página sin necesidad de realizar la carga completa, usamos el componente <inertia-link>.

  • También se puede realizar una llamada usando Inertia.visit()
  • Cuando tenemos una ancla con la envoltura <inertia-link>, se produce una solicitud XHR al servidor.


Icon activity.jpg
Actividad
XMLHttpRequest (XHR) es un objeto especial de Javascript que permite realizar peticiones HTTP asíncronas (AJAX) de forma nativa desde Javascript.



  • Cuando Inertia realiza una visita XHR, el servidor detecta que se trata de una visita Inertia y, en lugar de devolver una respuesta HTML completa, devuelve una respuesta JSON con el nombre del componente de la página JavaScript y los datos (props).

El protocolo

  • Lo primero que ocurre en una aplicacion inertia es que se solicita una página html completa nomal
  • Esta página tendrá los elementos js y css. El div principal será el punto de montaje de la aplicación y contendrá un elemento especial <data-page> cuyo valor es un json que codifica un page object para la página inicial.

Inertia utiliza esta información para iniciar el lado del cliente y mostrar el componente de página inicial.

<html>
<head>
    <title>My app</title>
    <link href="/css/app.css" rel="stylesheet">
    <script src="/js/app.js" defer></script>
</head>
<body>
 
<div id="app" data-page='{"component":"Event","props":{"event":{"id":80,"title":"Birthday party","start_date":"2019-06-02","description":"Come out and celebrate Jonathan&apos;s 36th birthday party!"}},"url":"/events/80","version":"c32b8e4965f418ad16eaebba1d4e960f"}'></div>
 
</body>
</html>

Instación

  • El proceso de instalación está descrito en la página oficial de forma muy intuitiva. Vamos a hacer la instalación para laravel y usaremos vue en el cliente.

Servidor



Icon activity.jpg
1.-Creamos un proyecto en laravel
laravel new probando_inertia





Icon activity.jpg
2.-Instalamos el paquete de inertia en el server
composer require inertiajs/inertia-laravel





Icon activity.jpg
3.-Instalamos el middleware de inertia
 php artisan inertia:middleware





Icon activity.jpg
4.-Registramos el middleware

Ahora registramos el middleware (HandleInertiaRequests) en App\Http\Kernel.php

  • Lo hacemos el el item middlewaregroups
  protected $middlewareGroups = [
//......
        'web' => [
         //......
          \App\Http\Middleware\HandleInertiaRequests::class,
         //......



Cliente



Icon activity.jpg
4.-Instalamos el paquete inertia para el front
  • Instalamos tanto inertia como vue-3 que vamos a usar en este caso
  • Se pueden usar otros frameworks (tanto en servidor como cliente, ver página oficial)
  • La instalación la hacemos vía npm
 npm install @inertiajs/inertia @inertiajs/inertia-vue3





Icon activity.jpg
5.-Instalamos un paquete para barra de progreso (opcional)
  • Dado que inertia trabaja con llamadas XHR (ajax), para que el usuario vea que la página está cambiando o se está cargando, es una buena experienica de usuario mostrar de alguna forma una marca de progreso al usuario mientras la página se carga.
  • Normalmente la carga será rápida (vía ajax suele ser rápido), pero los accesos a bases de datos, etc, pueden insertar un delay, y si no cambia nada en la pantalla el usuario podrá pensar que no funciona y dará muchas veces click.
  • Primero instalamos, posteriormente mostraremos su uso.
 npm install @inertia/progress




Poniendo el proyecto en fucionamiento

  • Una vez realizada la instalación de los paquetes que necesitamos, vamos a crear un proyecto base y verificar su funcionamiento.
Servidor



Icon activity.jpg
1.-Creamos la página de carga inicial app.blade.php
  • Inertia, como hemos indicado no va a realizar solicitudes de páginas al servidor, se van a renderizar páginas js con vue.
  • El servidor debe de entregar una primera página que será una vista de blade y la llamaremos app.blade.php
  • Si queremos usar otro nombre lo modificaremos usando
   Inertia::setRootView().
  • Iguamente se puede modificar el atributo protegido en Middleware/HandleInertiaRequest.php
    protected $rootView = 'app';
  • Esta plantilla debe de contener la directiva @inertia, la cual cargará un objeto de página'. Esta plantilla será una página html5 y la ubicación de los ficheros css y js:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    <link href="{{ mix('/css/app.css') }}" rel="stylesheet" />
    <script src="{{ mix('/js/app.js') }}" defer></script>
  </head>
  <body>
    @inertia
  </body>
</html>





Icon activity.jpg
2.-Publicar el middleware
  • Ahora debemos de pulbicar el middleware que hemos instalado previamente para poderlo utilizar en el proyecto.
  • Este middleware contiene dos métodos muy útiles (veremos posteriormente)
  • 1.-version() . Útil para ver la versión de los ficherso css, de forma que si cambian estos ficheros, podamos saberlo para realizar una carga de la página inicial y cargar los css correctos
  • 2.-share(). Útil para compartir datos entre las diferentes vistas, como podría ser el nombre de usuario.
 php artisan inertia:middleware
.



{{MRM_Actividad|Title=2.-Creamos vistas js con vue. |

  • Ahora vamos a crear vistas para cargar.
  • El proceso de ruteo lo gestiona laravel web.php
  • La carga de las vistas las hará larevel con la facade render
  • Vemos un ejemplo:
  • 1.-El ruteo en web.php
 
  • 2.- El controlador
  • Creamos un controlador llamado por ejemplo ControlerPpal'
php artisan make:controller ControllerPpal
  • 3.- La vista
Cliente

Cliente