wordpress

Create URL Shortener in Laravel: Step-by-Step Guide

1. Instalar Laravel

El primer paso para crear un acortador de URL en Laravel es instalar el framework. Puedes hacerlo utilizando Composer, ejecutando el siguiente comando en tu terminal:

composer global require laravel/installer

Una vez que Laravel esté instalado, puedes crear un nuevo proyecto ejecutando el siguiente comando:

laravel new url-shortener

Esto creará una nueva carpeta llamada «url-shortener» con la estructura básica de un proyecto Laravel.

2. Configurar la base de datos

El siguiente paso es configurar la base de datos para nuestro acortador de URL. Abre el archivo «.env» en la raíz de tu proyecto y configura los siguientes valores:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=url_shortener
DB_USERNAME=root
DB_PASSWORD=

Asegúrate de reemplazar los valores de «DB_DATABASE», «DB_USERNAME» y «DB_PASSWORD» con los de tu configuración de base de datos.

3. Crear el modelo y la migración

A continuación, vamos a crear el modelo y la migración para la tabla de URL acortadas. Ejecuta el siguiente comando en tu terminal:

php artisan make:model ShortenedUrl -m

Esto creará un nuevo archivo de migración en la carpeta «database/migrations». Abre el archivo y define la estructura de la tabla de URL acortadas:

public function up()
{
    Schema::create('shortened_urls', function (Blueprint $table) {
        $table->id();
        $table->string('original_url');
        $table->string('shortened_url')->unique();
        $table->timestamps();
    });
}

Una vez que hayas definido la estructura de la tabla, ejecuta el siguiente comando para migrar la base de datos:

php artisan migrate

4. Crear las rutas

Ahora vamos a crear las rutas para nuestro acortador de URL. Abre el archivo «routes/web.php» y agrega las siguientes rutas:

Route::get('/', 'ShortenedUrlController@index')->name('home');
Route::post('/shorten', 'ShortenedUrlController@shorten')->name('shorten');
Route::get('/{shortened_url}', 'ShortenedUrlController@redirect')->name('redirect');

Estas rutas definirán las acciones que se llevarán a cabo cuando se acceda a la página principal, se envíe un formulario para acortar una URL y se acceda a una URL acortada.

Recomendado:  12 Best Python Projects for Class 12: Top Ideas

5. Crear los controladores

A continuación, vamos a crear los controladores para manejar las acciones de nuestro acortador de URL. Ejecuta los siguientes comandos en tu terminal:

php artisan make:controller ShortenedUrlController

Esto creará un nuevo archivo de controlador en la carpeta «app/Http/Controllers». Abre el archivo y agrega los siguientes métodos:

public function index()
{
    return view('index');
}

public function shorten(Request $request)
{
    $request->validate([
        'url' => 'required|url',
    ]);

    $shortenedUrl = ShortenedUrl::create([
        'original_url' => $request->url,
        'shortened_url' => $this->generateShortenedUrl(),
    ]);

    return redirect()->route('home')->with('shortened_url', $shortenedUrl->shortened_url);
}

public function redirect($shortenedUrl)
{
    $url = ShortenedUrl::where('shortened_url', $shortenedUrl)->first();

    if ($url) {
        return redirect($url->original_url);
    } else {
        abort(404);
    }
}

private function generateShortenedUrl()
{
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $shortenedUrl = '';

    for ($i = 0; $i < 6; $i++) {
        $index = rand(0, strlen($characters) - 1);
        $shortenedUrl .= $characters[$index];
    }

    return $shortenedUrl;
}

Estos métodos definirán la lógica para mostrar la página principal, acortar una URL y redirigir a una URL acortada.

6. Crear las vistas

Ahora vamos a crear las vistas para nuestro acortador de URL. Crea una nueva carpeta llamada "shortened_urls" en la carpeta "resources/views". Dentro de esta carpeta, crea los siguientes archivos:

  • index.blade.php
  • shorten.blade.php
  • redirect.blade.php

En el archivo "index.blade.php", agrega el siguiente código:

<h1>URL Shortener</h1>

@if (session('shortened_url'))
    <div class="alert alert-success">
        Your shortened URL: <a href="{{ route('redirect', session('shortened_url')) }}">{{ route('redirect', session('shortened_url')) }}</a>
    </div>
@endif

<form action="{{ route('shorten') }}" method="POST">
    @csrf
    <div class="form-group">
        <input type="text" name="url" class="form-control" placeholder="Enter URL" required>
    </div>
    <button type="submit" class="btn btn-primary">Shorten</button>
</form>

En el archivo "shorten.blade.php", agrega el siguiente código:

<h1>URL Shortened</h1>

<div class="alert alert-success">
    Your shortened URL: <a href="{{ route('redirect', $shortenedUrl) }}">{{ route('redirect', $shortenedUrl) }}</a>
</div>

En el archivo "redirect.blade.php", agrega el siguiente código:

<h1>Redirecting...</h1>

Estas vistas definirán la estructura y el contenido de las páginas de nuestro acortador de URL.

7. Implementar la lógica de acortamiento de URL

Ahora que hemos configurado las rutas, los controladores y las vistas, vamos a implementar la lógica para acortar las URL. Abre el archivo "app/Http/Controllers/ShortenedUrlController.php" y agrega el siguiente código al método "shorten":

$shortenedUrl = ShortenedUrl::where('original_url', $request->url)->first();

if ($shortenedUrl) {
    return view('shorten', ['shortenedUrl' => $shortenedUrl->shortened_url]);
}

Este código buscará si ya existe una URL acortada para la URL original proporcionada. Si existe, mostrará la URL acortada en la vista "shorten".

Recomendado:  Laravel VueJS File Upload Using Vue-dropzone Example: Implementing File Upload

8. Implementar la redirección de URL acortadas

Ahora vamos a implementar la lógica para redirigir a las URL acortadas. Abre el archivo "app/Http/Controllers/ShortenedUrlController.php" y agrega el siguiente código al método "redirect":

$url = ShortenedUrl::where('shortened_url', $shortenedUrl)->first();

if ($url) {
    $url->increment('visits');
    return redirect($url->original_url);
} else {
    abort(404);
}

Este código buscará la URL acortada en la base de datos y, si existe, incrementará el contador de visitas y redirigirá a la URL original. Si no existe, mostrará una página de error 404.

9. Agregar validaciones y manejo de errores

Para mejorar la seguridad y la experiencia del usuario, vamos a agregar validaciones y manejo de errores a nuestro acortador de URL. Abre el archivo "app/Http/Controllers/ShortenedUrlController.php" y agrega el siguiente código al método "shorten":

$request->validate([
    'url' => 'required|url',
]);

Este código asegurará que se proporcione una URL válida antes de acortarla.

A continuación, vamos a mostrar los errores de validación en la vista. Abre el archivo "resources/views/index.blade.php" y agrega el siguiente código debajo del formulario:

@error('url')
    <div class="alert alert-danger">
        {{ $message }}
    </div>
@enderror

Este código mostrará cualquier error de validación relacionado con el campo "url" en un mensaje de alerta rojo.

10. Personalizar la apariencia y funcionalidad

Si deseas personalizar la apariencia y la funcionalidad de tu acortador de URL, puedes editar las vistas y los estilos CSS. Puedes agregar estilos personalizados en el archivo "public/css/app.css" y enlazarlo en la vista principal utilizando la etiqueta "link" en el archivo "resources/views/layouts/app.blade.php".

11. Probar y desplegar la aplicación

Finalmente, puedes probar tu acortador de URL ejecutando el siguiente comando en tu terminal:

php artisan serve

Esto iniciará un servidor de desarrollo y podrás acceder a tu acortador de URL en tu navegador en la dirección "http://localhost:8000".

Recomendado:  Blockchain in Healthcare: Innovations & Opportunities for the Future

Si estás satisfecho con tu acortador de URL, puedes desplegarlo en un servidor de producción siguiendo los pasos recomendados por Laravel.

¡Felicidades! Ahora tienes un acortador de URL funcional creado en Laravel.

Autor

osceda@hotmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *