Tienes que escribir tus aplicaciones web en Laravel

Desde la primera vez que me di a la tarea de crear una aplicación web funcional, me tope con la realidad de sólo saber algunos conocimientos dispersos sobre html5, CSS3, Javascript, php y un poquito sobre seguridad de aplicaciones web. Esa realidad me hizo entender la gran cantidad de conocimientos que una sola persona debe poseer para crear hasta la página más sencilla y que se vea en la web. Entonces entendí que las webs profesionales se hacen por varias personas, en las que cada una de ellas tiene uno o quizá dos conocimientos especializados en tecnologías que se usan para crear una página web. Claro que están los famosos sitios de creación de sitios como Wix, o los CMS etc., pero hasta estas herramientas tienen sus limitaciones y presentas muchos desafíos si quieres manipular el código de manera simple y sencilla. En un principio, yo muy entusiasta pensaba que con los conocimientos que ya poseía, podría hacer un sitio web en a lo mucho, un par de horas, pero ¡o sorpresa!, la realidad me decía otra cosa. Antes ya había leído sobre la conveniencia de utilizar algún tipo de framework para trabajar con páginas web, pero hice caso omiso. Ahora sé que es muy conveniente primero hacer una investigación profunda, si desconoces varios aspectos de un aplicativo web; en mi caso eso me hubiera convenido antes de emprender la dura batalla con php desde cero.

Es importante conocer bien varios aspectos de php antes de usar un framework como Laravel, pero ya conociendo eso más importante, es decir, funciones globales, variables globales, operadores, tipos de datos, rutas absolutas, rutas relativas, etc. También sería recomendable que tuvieras conocimientos básicos de html5 y CSS3, ya poseyendo estos conocimientos es 100% recomendable que utilices un framework si por ejemplo, estás buscando desde el principio tener suscriptores en tu sitio web. Con laravel por ejemplo, ya teniendo instalado tu proyecto, sólo tendrías que escribir algo tan sencillo como lo siguiente en la consola:

composer require laravel/ui

Después, tendrías que descargar las dependencias del frontend a través de npm si se da el caso de que quieras usar Vue 2.x o React, pero recuerda que tienes que tener instalado el software NodeJs, versión 12.x o superior, para evitarte muchos problemas. Si tienes dudas y quieres ver algún video tutorial de como hacer esto ve mi video en https://www.youtube.com/watch?v=vuOWW2-HwEQ

En las últimas semanas he dedicado algo de tiempo a investigar sobre el framework de vista Vue 3, y si por ejemplo quieres tener un sistema de registro de usuarios con esta herramienta tendrías que invertirle algo de tiempo para asegurar ese login, o sea, que cumpla con lo mínimo en cuestiones de seguridad web, y la cuestión aquí es que la documentación de Vue 3 es escasa en español, además de que el entorno se usa como una aplicación totalmente independiente de cualquier framework del backend como Laravel, añediéndole que quizá tendrías que tomar algún curso porque es un aspecto avanzado de Vue3. Pero ahorrate eso con Laravel, porque este framework ya viene integrado con lo necesario, tanto en aspectos de visualización presentable, como con lo necesario en el backend para dar de alta a un nuevo usuario en tu base de datos; es más, puedes integrar Vue 2.x en laravel, pues ya viene preparado en el entorno para usarlo de una manera hermosa en el framework. A continuación de dejo el código de la capa presentación del formulario de registro(con esto podrías ahorrar tiempo cambiándole quizá sólo los estilos con CSS3 a este formulario) que se crea automáticamente al intalar las dependencias de laravel/ui:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{  __('Register') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('register') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right">@lang('users.attributes.name')</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>

                                @error('name')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">@lang('users.attributes.password_confirmation')</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Register') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Ahora a instalar unas dependencias del frontend a través de npm:

// después ejecutar las siguientes ordenes
php artisan ui bootstrap
php artisan ui vue
//para generar automáticamente el formulario de login y registro
php artisan ui bootstrap --auth
//en caso de querer usar Vue 2.x
php artisan ui vue --auth
//seguido de esto ejecutar en consola
npm install && npm run dev

después la parte que resuelve la lógica de negocio en el backend, que son dos archivos que se crean e intalan de manera automática cuando instalas UI, dales un vistazo:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}

Después el Controlador LoginController hace uso de un trait, que tiene en su interior lo siguiente:

<?php
//en vendor/laravel/ui/auth-backend
namespace Illuminate\Foundation\Auth;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

trait RegistersUsers
{
    use RedirectsUsers;

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\View\View
     */
    public function showRegistrationForm()
    {
        return view('auth.register');
    }

    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        if ($response = $this->registered($request, $user)) {
            return $response;
        }

        return $request->wantsJson()
                    ? new JsonResponse([], 201)
                    : redirect($this->redirectPath());
    }

    /**
     * Get the guard to be used during registration.
     *
     * @return \Illuminate\Contracts\Auth\StatefulGuard
     */
    protected function guard()
    {
        return Auth::guard();
    }

    /**
     * The user has been registered.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
    protected function registered(Request $request, $user)
    {
        //
    }
}

Por está y muchas razones más, si apenas estás aprendiendo sobre tecnologías web, no hardcodes innecesariamente, cuando puedes usar herramientas tan poderosas como la que he mencionado en este post.

Hola, Gracias por visitar mi blog. He querido compartir este blog a través de GitHub. Es bienvenido todo el que quiera contribuir o mejorar este sistema de blog. Tus comentarios serán de mucha utilidad, si descargas el proyecto y tienes alguna duda sobre como echarlo a andar, no olvides que me puedes localizar en vuesongosechez@gmail.com o dejáme un Comentario