yii2_links_shorterer

0

Описание

Языки

  • PHP88,9%
  • JavaScript7,2%
  • Dockerfile2,1%
  • Shell1,6%
  • CSS0,2%
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
README.md

Сервис коротких ссылок с QR-кодами

Веб-приложение для создания коротких ссылок с генерацией QR-кодов на базе Yii2 Framework.

Технологический стек

  • Yii2 — PHP-фреймворк
  • MySQL/MariaDB — база данных
  • jQuery — JavaScript для Ajax-запросов
  • Tailwind CSS — стилизация (CDN)
  • Docker — контейнеризация
  • Nginx — веб-сервер
  • PHP 8.1 — язык программирования

Функциональность

  • Валидация URL (http/https и атрибуты)
  • Проверка доступности ресурса
  • Генерация коротких ссылок
  • Генерация QR-кодов (без внешних API, библиотека endroid/qr-code)
  • Обработка через Ajax без перезагрузки страницы
  • Редирект по коротким ссылкам
  • Логирование переходов: внешний IP, User-Agent, Referer
  • Счётчик переходов по каждой ссылке
  • Мини админ-панель: список ссылок, счётчик переходов, просмотр логов по IP

Структура базы данных

ПолеОписание
idПервичный ключ
original_urlОригинальный URL
short_codeКороткий код (8 символов)
created_atДата создания
click_countКоличество переходов
ПолеОписание
idПервичный ключ
link_idВнешний ключ на links
ip_addressВнешний IP пользователя
user_agentUser-Agent браузера
refererReferer заголовок
created_atДата и время перехода

Требования

  • Docker и Docker Compose
  • Git (для клонирования)

Установка и запуск

0. Предварительные требования

Убедитесь, что Docker Desktop запущен:

При ошибке подключения запустите Docker Desktop и дождитесь полной загрузки.

1. Клонирование и переход в проект

2. Запуск контейнеров

Проверьте, что запущены оба контейнера:

docker ps
(должны быть
yii2_shortener_web
и
yii2_shortener_db
). Если веб-контейнер отсутствует — см. Решение проблем.

3. Установка зависимостей Composer

4. Миграции

При запросе подтверждения введите

yes
.

5. Права доступа (при необходимости)

6. Доступ

Использование

  1. На главной введите URL и нажмите «OK».
  2. После проверки валидности и доступности отображаются QR-код и короткая ссылка.
  3. Переход по короткой ссылке выполняет редирект на исходный URL, в БД пишется лог (IP, User-Agent, referer) и увеличивается счётчик.

Админ-панель

  • Ссылка на главной: кнопка «Админ-панель» в правом верхнем углу.
  • Прямой адрес: http://localhost:8080/admin

Возможности:

  • Список всех ссылок: короткий код, оригинальный URL, счётчик переходов, дата создания.
  • Для каждой ссылки — переход в логи по IP: внешний IP, дата/время, User-Agent, Referer.

Примеры URL для тестирования

  • https://www.google.com
  • https://github.com
  • http://example.com

Структура проекта

yii2_shorterer_links/ ├── assets/ # PHP-классы ассетов (AppAsset) ├── config/ # Конфигурация │ ├── db.php │ ├── web.php │ ├── console.php │ └── params.php ├── controllers/ │ ├── SiteController.php # Главная, создание коротких ссылок │ ├── RedirectController.php # Редирект по коду, логирование │ └── AdminController.php # Админ-панель: ссылки и логи по IP ├── models/ │ ├── Link.php │ └── LinkLog.php ├── migrations/ ├── views/ │ ├── site/ │ │ └── index.php # Главная страница │ └── admin/ │ ├── index.php # Список ссылок │ └── logs.php # Логи переходов по одной ссылке ├── web/ │ ├── css/ │ ├── js/ │ └── index.php ├── docker/ │ ├── nginx.conf │ └── entrypoint.sh ├── docker-compose.yml ├── Dockerfile └── composer.json

Маршруты и API

МаршрутОписание
GET /Главная страница
POST /site/create-short-linkСоздание короткой ссылки и QR (Ajax)
GET /adminАдмин-панель — список ссылок
GET /admin/logs/{id}Логи переходов по ссылке (IP, счётчик)
GET /{code}Редирект по короткой ссылке (логирование + счётчик)

POST /site/create-short-link

Параметры:

url
(string),
_csrf

Успех:

Ошибка:

Остановка и удаление

Разработка

Логи

Настройка БД

Файл

config/db.php
:

Соответствует переменным окружения в

docker-compose.yml
.

Решение проблем

Подробнее в TROUBLESHOOTING.md.

  • Веб-контейнер не запущен — пересборка и запуск, при необходимости просмотр логов и установка зависимостей вручную.
  • Ошибка прав доступа
    chmod -R 777 runtime web/assets
    внутри контейнера.
  • Ошибка «parent snapshot does not exist»
    docker builder prune -f
    , затем
    docker-compose build --no-cache
    .

Лицензия

Проект создан в рамках тестового задания.