定制 richard-roman/short-links-qr 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

richard-roman/short-links-qr

Composer 安装命令:

composer require richard-roman/short-links-qr

包简介

Short links and QR codes for Laravel applications

README 文档

README

Paquete Composer de short links + códigos QR para aplicaciones Laravel.

Versión: 1.1.0
Requisitos: PHP ^8.3, Laravel ^11|^12|^13
Repositorio: github.com/Richard-Roman/short-links-qr
Packagist: packagist.org/packages/richard-roman/short-links-qr

Instalación

Packagist (recomendado)

composer require richard-roman/short-links-qr:^1.1
composer require endroid/qr-code:^6.0

VCS (sin Packagist)

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/Richard-Roman/short-links-qr"
        }
    ],
    "require": {
        "richard-roman/short-links-qr": "^1.1",
        "endroid/qr-code": "^6.0"
    }
}

El paquete se auto-descubre vía ShortLinksServiceProvider. Ejecutar migraciones:

php artisan migrate

Configuración (opcional)

php artisan vendor:publish --tag=short-links-config

Claves principales en config/short-links.php:

Clave Default Descripción
route_prefix l Prefijo de rutas públicas
qr_generator RichardRoman\ShortLinks\Laravel\Qr\EndroidQrGenerator::class Clase del generador de QR a resolver desde el contenedor
throttle 120,1 Rate limit redirect/QR
cache.ttl 3600 TTL cache de URL resuelta (seg)
cache.prefix short_link_redirect: Prefijo clave cache
generator.length 8 Longitud de códigos auto-generados
generator.charset charset sin ambiguos Caracteres del generador aleatorio
route_pattern [a-hjkmnp-z2-9]{8} Regex Laravel where() + validación de códigos

Variables de entorno opcionales: SHORT_LINKS_LENGTH, SHORT_LINKS_CHARSET, SHORT_LINKS_ROUTE_PATTERN.

v1.1.0 — Códigos configurables y manuales

Actualización semver minor compatible con v1.0: sin overrides en .env, el comportamiento es idéntico a 1.0.0.

Código manual opcional

$shortLink = ShortLinks::create(
    urlDestino: 'https://example.com/recurso',
    titulo: 'Demo',
    codigo: 'K7MNP2WX', // normalizado a minúsculas; debe cumplir route_pattern
);

Si el código no cumple route_pattern, se lanza InvalidCodeFormatException. Si ya existe, DuplicateCodeException sin reintentos aleatorios.

Personalizar generador y patrón de ruta

SHORT_LINKS_LENGTH=5
SHORT_LINKS_CHARSET=abc
SHORT_LINKS_ROUTE_PATTERN=[abc]{5}

El generador y las rutas públicas MUST usar el mismo route_pattern.

Actualizar desde v1.0

composer require richard-roman/short-links-qr:^1.1
php artisan migrate

Ver CHANGELOG.md para el detalle completo.

Uso básico

Crear short links (Facade)

use RichardRoman\ShortLinks\Laravel\Facades\ShortLinks;

$shortLink = ShortLinks::create(
    urlDestino: 'https://www.youtube.com/watch?v=abc123',
    titulo: 'Video demo',
    entidadTipo: 'entregable',
    entidadId: $entregableId,
    creadoPorId: auth()->id(),
);

$existente = ShortLinks::findByEntity('entregable', $entregableId);

Rutas públicas (auto-registradas)

  • GET /l/{codigo} → redirect 302 seguro + analytics
  • GET /l/{codigo}/qr → PNG 300×300 del short URL

Nombres de ruta: short-links.redirect, short-links.qr.

Importante: registrar el ServiceProvider antes de rutas catch-all del host (p. ej. /blog).

Entity resolvers (host)

El paquete no conoce modelos de la app. Registrar resolvers en AppServiceProvider::boot():

use App\ShortLinks\Resolvers\EntregableEntityResolver;
use App\ShortLinks\Resolvers\ProyectoEntityResolver;

$this->app->tag([
    ProyectoEntityResolver::class,
    EntregableEntityResolver::class,
], 'short-links.entity-resolvers');

Cada resolver implementa RichardRoman\ShortLinks\Contracts\EntityResolverInterface:

public function supports(string $entidadTipo): bool;
public function resolveUrl(string $entidadId): ?string;

Cache de redirect

Tras resolver la URL (resolver host o url_destino), se cachea por codigo. La cache se invalida al desactivar un link.

QR

Requiere endroid/qr-code en el proyecto consumidor. Sin la dependencia, GET /l/{codigo}/qr responde 503.

Ejemplo multi-app

App A (app-web): resolvers producto, factura, entregable.
App B (blog): resolver articulo opcional; links externos solo con url_destino.

Misma instalación Composer; distintos resolvers taggeados por host.

Desarrollo local

git clone https://github.com/Richard-Roman/short-links-qr.git
cd short-links-qr
composer install
composer validate --strict
composer test

Path repository (monorepo dev)

{
    "repositories": [
        {
            "type": "path",
            "url": "../short-links-qr",
            "options": { "symlink": true }
        }
    ],
    "require": {
        "richard-roman/short-links-qr": "@dev"
    }
}

Estructura

src/Contracts/     ← interfaces
src/Core/          ← PHP (servicios, VOs, validación)
src/Laravel/       ← Eloquent, rutas, Facade, QR endroid
tests/Unit/        ← tests
tests/Feature/     ← Orchestra Testbench

Licencia

MIT — ver LICENSE.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 4
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-21

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固