PHPackages                             evgip/w3a-core - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. evgip/w3a-core

ActiveLibrary

evgip/w3a-core
==============

Ядро w3a

v0.1.2(today)04↑2900%PHPPHP ^8.1

Since Jul 27Pushed todayCompare

[ Source](https://github.com/evgip/w3a-core)[ Packagist](https://packagist.org/packages/evgip/w3a-core)[ RSS](/packages/evgip-w3a-core/feed)WikiDiscussions main Synced today

READMEChangelog (3)DependenciesVersions (3)Used By (0)

w3a-core
========

[](#w3a-core)

[![PHP Version](https://camo.githubusercontent.com/04744bae0a61d2ffe29c26f07a9612eae20445fc6feaeb77b3af1f0e9be6447c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e312d3838393242462e737667)](https://php.net)[![License](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](LICENSE)

Высокопроизводительное, модульное и полностью независимое ядро PHP-фреймворка. Поддерживает DI-контейнер, сервис-провайдеры, middleware-конвейер, роутинг с кэшированием и ленивую загрузку конфигурации.

✨ Особенности
-------------

[](#-особенности)

- ⚡ **Ленивая загрузка конфигов:** Файлы читаются с диска только при первом обращении к их ключам.
- 🧩 **Чистая архитектура:** Ядро не знает о бизнес-логике приложения. Связь через интерфейсы (`Contracts`).
- 🚀 **Встроенный CLI:** Инструменты командной строки для управления приложением без HTTP-оверхеда.
- 🛡️ **Безопасность:** Встроенная защита от CSRF, XSS (CSP), Rate Limiting и Firewall.

📋 Требования
------------

[](#-требования)

- PHP 8.1+
- Расширения: `pdo`, `mbstring`, `json`
- База данных: MySQL / MariaDB

📦 Установка
-----------

[](#-установка)

### Для продакшена (через Packagist)

[](#для-продакшена-через-packagist)

```
composer require evgip/w3a-core
```

### Для локальной разработки (через symlink)

[](#для-локальной-разработки-через-symlink)

Добавьте в `composer.json` вашего основного проекта:

```
{
    "repositories": [
        {
            "type": "path",
            "url": "./w3a-core"
        }
    ],
    "require": {
        "evgip/w3a-core": "@dev"
    }
}
```

Затем выполните `composer update evgip/w3a-core`. Composer создаст символическую ссылку, и все изменения в ядре будут применяться мгновенно.

🚀 Быстрый старт
---------------

[](#-быстрый-старт)

```
// public/index.php
require_once __DIR__ . '/../vendor/autoload.php';

// 1. Загрузка переменных окружения
\W3a\Core\Env::load(__DIR__ . '/../.env');

// 2. Инициализация и запуск приложения
$app = new \W3a\Core\Application(__DIR__ . '/..');
$app->bootstrap()->run();
```

📂 Структура приложения
----------------------

[](#-структура-приложения)

```
your-app/
├── app/
│   ├── Config/                 # Конфигурация (app.php, database.php, ...)
│   ├── Lang/                   # Файлы локализации (ru.php, en.php)
│   ├── Modules/                # Бизнес-модули (Users, Stories, Admin, ...)
│   └── AppServiceProvider.php  # Связывание интерфейсов ядра с реализациями
├── bin/
│   └── w3a                     # CLI-интерфейс ядра
├── storage/
│   ├── cache/                  # Кэш маршрутов, представлений и провайдеров
│   └── logs/                   # Логи приложения и PHP-ошибок
├── public/
│   └── index.php               # Точка входа
└── composer.json

```

🔌 Ключевые интерфейсы (Contracts)
---------------------------------

[](#-ключевые-интерфейсы-contracts)

Ядро работает через инверсию зависимостей. Перед использованием необходимо зарегистрировать реализации в `AppServiceProvider`:

ИнтерфейсНазначение`Contracts\RateLimitStorageInterface`Хранилище лимитов запросов (Rate Limiter)`Contracts\UserIdProviderInterface`Получение ID текущего авторизованного пользователя`Contracts\AuditStorageInterface`Хранилище журнала аудита действий`Contracts\BannedIpRepositoryInterface`Проверка заблокированных IP-адресов (Firewall)`Contracts\UniqueCheckerInterface`Валидация уникальности значений в БД`Contracts\ErrorHandlerInterface`Обработка и рендеринг страниц ошибок### Пример регистрации

[](#пример-регистрации)

```
// app/AppServiceProvider.php
namespace App;

use W3a\Core\Container;
use W3a\Core\Contracts\ErrorHandlerInterface;
use App\Modules\Errors\Services\ErrorHandler;

class AppServiceProvider
{
    public function register(Container $container): void
    {
        // Ленивая регистрация через замыкание
        $container->singleton(ErrorHandlerInterface::class, fn($c) =>
            new ErrorHandler($c)
        );

        // ... другие регистрации
    }
}
```

⚙️ Конфигурация
---------------

[](#️-конфигурация)

Конфиги поддерживают **dot-нотацию** (`config('database.host')`) и загружаются **лениво** (файл `database.php` не будет прочитан, если вы обращаетесь только к `config('app.name')`).

### `app/Config/app.php`

[](#appconfigappphp)

```
return [
    'name' => 'my-app',
    'env' => \W3a\Core\Env::get('APP_ENV', 'development'),
    'lang' => \W3a\Core\Env::get('APP_LANG', 'ru'),
    'log_path' => __DIR__ . '/../../storage/logs/app.log',
];
```

### `app/Config/rate_limit.php`

[](#appconfigrate_limitphp)

```
return [
    'enabled' => true,
    'gc_probability' => 5,
    'rules' => [
        'global.get' => ['max_requests' => 100, 'window' => 60],
        'auth.submit' => ['max_requests' => 5, 'window' => 60],
    ],
];
```

💻 CLI-интерфейс
---------------

[](#-cli-интерфейс)

Ядро предоставляет консольные команды для управления приложением без инициализации HTTP-стека.

```
# Очистка всех кэшей (маршруты, представления, провайдеры)
php bin/w3a cache:clear

# Показать список доступных команд
php bin/w3a help
```

🧩 Основные компоненты
---------------------

[](#-основные-компоненты)

КомпонентНазначение`Application`Точка входа, управление жизненным циклом (bootstrap)`Container`DI-контейнер (поддержка `singleton`, `bind`, `instance`)`Router`Маршрутизация с поддержкой middleware-групп и компиляцией в кэш`Config`Управление конфигурацией с dot-нотацией и ленивой загрузкой`Database`Безопасная обёртка над PDO с подготовленными выражениями`Model`Абстрактная модель с поддержкой Soft Deletes и Mass Assignment`View` / `ViewFinder`Рендеринг шаблонов с поддержкой тем (Fallback Chain)`Validator`Валидация входных данных (required, min, max, regex, unique)📄 Лицензия
----------

[](#-лицензия)

Распространяется под лицензией [MIT](LICENSE).

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance100

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

0d ago

PHP version history (2 changes)v0.1.1PHP &gt;=8.0

v0.1.2PHP ^8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/6613623?v=4)[Evg](/maintainers/evgip)[@evgip](https://github.com/evgip)

---

Top Contributors

[![evgip](https://avatars.githubusercontent.com/u/6613623?v=4)](https://github.com/evgip "evgip (5 commits)")

### Embed Badge

![Health badge](/badges/evgip-w3a-core/health.svg)

```
[![Health](https://phpackages.com/badges/evgip-w3a-core/health.svg)](https://phpackages.com/packages/evgip-w3a-core)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
