Mascotas Perdidas Py – Parte III

22 de Enero

A continuación necesitamos crear las vistas para login y register pues al intentar entrar veremos un error similar a este:

Para las vistas usaré bootstrap, es una especie de framework para front-end, permite normalizar algunas características visuales dentro del navegador, para diferentes etiquetas y componentes de formulario, sin mencionar que nos facilita hacer responsive nuestra página.

Para integrar bootstrapa a nuestro proyecto, debemos incluir dentro del proyecto usando vite que viene con laravel para ello seguirmos en parte esta guía para instalar entre los paquetes que usa con node y npm.

npm i --save bootstrap @popperjs/core
npm i --save-dev sass

Agregamos al archivo resources/js/app.js

    // Import all of Bootstrap's JS
    import * as bootstrap from 'bootstrap';
    window.bootstrap = bootstrap;

Al archivo resources/js/bootstrap.js agregamos:

    // Import our custom CSS

    import '../sass/app.scss'
    import '../css/app.css'

Al archivo vite.config.js queda como:

    import { defineConfig } from 'vite';
    import laravel from 'laravel-vite-plugin';
    import path from 'path';

    export default defineConfig({
        plugins: [
            laravel({
                input: [
                    'resources/js/app.js'
                ],
                refresh: true,
            }),
        ],
        resolve: {
            alias: {
                '~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'),
            }
        },
    });

Ejecutamos este comando para que se compile las versiones minificadas con vite de bootstrap:

npm run build

Ahora para probar, modificamos temporalmente el archivo routes/web.php para probar una vista que incluya las librerias de bootstrap:

    Route::get('/', function () {
        return view('test');
    });

Y aqui creamos la vista para probarla resources/views/test.blade.php

    <!DOCTYPE html>
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">

            <title>Test Bootstrap</title>

            @vite('resources/js/app.js')
        </head>
        <body>
            <div class="container py-4 px-3 mx-auto">
                <h1>Hello, Bootstrap and Vite!</h1>
                <button class="btn btn-primary">Primary button</button>
            </div>
        </body>
    </html>

Y todo funciona! podemos ver algo como esto

si bootstrap no funcionara, veriamos algo como:

Asi que con eso concluimos la parte de incluir bootstrap en el proyecto, ahora procederemos a hacer un formulario de login.

Creamos un archivo en resources/views/auth/login.blade.php

    <!doctype html>
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="Formulario Login, mascotas Perdidas">
        <meta name="author" content="Login,Mascotas Perdidas">
        <title>Signin Template · Bootstrap v5.3</title>

        @vite('resources/js/app.js')

        <!-- Favicons -->
    {{-- <link rel="apple-touch-icon" href="/docs/5.3/assets/img/favicons/apple-touch-icon.png" sizes="180x180">
    <link rel="icon" href="/docs/5.3/assets/img/favicons/favicon-32x32.png" sizes="32x32" type="image/png">
    <link rel="icon" href="/docs/5.3/assets/img/favicons/favicon-16x16.png" sizes="16x16" type="image/png">
    <link rel="manifest" href="/docs/5.3/assets/img/favicons/manifest.json">
    <link rel="mask-icon" href="/docs/5.3/assets/img/favicons/safari-pinned-tab.svg" color="#712cf9">
    <link rel="icon" href="/docs/5.3/assets/img/favicons/favicon.ico"> --}}
    <meta name="theme-color" content="#712cf9">


        <style>
        .bd-placeholder-img {
            font-size: 1.125rem;
            text-anchor: middle;
            -webkit-user-select: none;
            -moz-user-select: none;
            user-select: none;
        }

        @media (min-width: 768px) {
            .bd-placeholder-img-lg {
            font-size: 3.5rem;
            }
        }

        .b-example-divider {
            height: 3rem;
            background-color: rgba(0, 0, 0, .1);
            border: solid rgba(0, 0, 0, .15);
            border-width: 1px 0;
            box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
        }

        .b-example-vr {
            flex-shrink: 0;
            width: 1.5rem;
            height: 100vh;
        }

        .bi {
            vertical-align: -.125em;
            fill: currentColor;
        }

        .nav-scroller {
            position: relative;
            z-index: 2;
            height: 2.75rem;
            overflow-y: hidden;
        }

        .nav-scroller .nav {
            display: flex;
            flex-wrap: nowrap;
            padding-bottom: 1rem;
            margin-top: -1px;
            overflow-x: auto;
            text-align: center;
            white-space: nowrap;
            -webkit-overflow-scrolling: touch;
        }
        </style>

        <style>
            /* sign-in  */
            html,
    body {
    height: 100%;
    }

    body {
    display: flex;
    align-items: center;
    padding-top: 40px;
    padding-bottom: 40px;
    background-color: #f5f5f5;
    }

    .form-signin {
    max-width: 330px;
    padding: 15px;
    }

    .form-signin .form-floating:focus-within {
    z-index: 2;
    }

    .form-signin input[type="email"] {
    margin-bottom: -1px;
    border-bottom-right-radius: 0;
    border-bottom-left-radius: 0;
    }

    .form-signin input[type="password"] {
    margin-bottom: 10px;
    border-top-left-radius: 0;
    border-top-right-radius: 0;
    }
        </style>

        
        <!-- Custom styles for this template -->
        <link href="sign-in.css" rel="stylesheet">
    </head>
    <body class="text-center">
        
    <main class="form-signin w-100 m-auto">
    <form>
        {{-- <img class="mb-4" src="https://getbootstrap.com/docs/5.3/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57"> --}}
        <h1 class="h3 mb-3 fw-normal">Iniciar Sesion</h1>

        <div class="form-floating">
        <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
        <label for="floatingInput">Email address</label>
        </div>
        <div class="form-floating">
        <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
        <label for="floatingPassword">Password</label>
        </div>

        <div class="checkbox mb-3">
        <label>
            <input type="checkbox" value="remember-me"> Remember me
        </label>
        </div>
        <button class="w-100 btn btn-lg btn-primary" type="submit">Sign in</button>
        <p class="mt-5 mb-3 text-muted">&copy; 2017–2022</p>
    </form>
    </main>


        
    </body>
    </html>

Lo que debería mostrarnos una vista como esta:

Con esto concluimos esta entrada, tenemos bootstrap instalado y una vista de login (aún no funcional, pero de acá en adelante iremos un poco más rápido y lo que haré será agregar las entradas a los commit donde pueden ver los cambios que subo) por ahora cierro acá.

Referencias:

Link a cambios realizados en github: 6dd05767c7db79d91cc9eb920b2065f6dc99ea7c:

Por ahora lo dejo aqui, en el siguiente post haremos los siguientes cambios:

  • actualizaremos este formulario de login
  • crearemos un formulario de registro
  • tambien comprobaremos el envio de email al crear una cuenta

Saludos