PHPackages                             remetulla/tinymvc-php - 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. [Framework](/categories/framework)
4. /
5. remetulla/tinymvc-php

ActiveProject[Framework](/categories/framework)

remetulla/tinymvc-php
=====================

Mini MVC framework in Yii2 style

1.0.6(4w ago)161[1 PRs](https://github.com/remetulla17771/tinymvc/pulls)Apache-2.0PHPPHP ^7.4 || ^8.0CI passing

Since Jul 10Pushed 2w agoCompare

[ Source](https://github.com/remetulla17771/tinymvc)[ Packagist](https://packagist.org/packages/remetulla/tinymvc-php)[ RSS](/packages/remetulla-tinymvc-php/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (7)Dependencies (3)Versions (10)Used By (0)

TinyMVC
=======

[](#tinymvc)

Мини-фреймворк на PHP в стиле Yii2 (упрощённый MVC): `web/index.php → Router → Controller → View/Layout`, простые компоненты из конфига, ActiveRecord/Query, i18n, ассеты, обработка ошибок и логирование.

> Репозиторий: `remetulla17771/tinymvc`
> Лицензия: Apache 2.0 (см. `LICENSE`)

---

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

[](#возможности)

- **Front Controller**: единая точка входа `web/index.php`.
- **Routing**: `/{controller}/{action}` + параметры через `$_GET` (Reflection).
- **Modules**: префикс в URL `/{module}/{controller}/{action}` (пример: `/admin/site/index`).
- **MVC**: контроллеры в `app/controllers`, view в `views/`, layout в `views/layouts`.
- **Компоненты** (мини DI-контейнер): создаются из `app/config/web.php` и доступны как свойства `$this->user`, `$this->urlManager`, `$this->lang`, `$this->response`, и т.д.
- **DB**: PDO singleton (`app/Db.php`).
- **ActiveRecord**: базовый CRUD + `Query` (`where()`, `one()`, `all()`, `limit/offset/orderBy/count`).
- **Response**: HTML/JSON/redirect, с `send()`.
- **i18n**: переводы в `app/messages//.php` (`ru`, `kk`, `pr`).
- **Ошибки**: `ErrorHandler` ловит exception/error/fatal, пишет логи в `runtime/logs`.
- **Console Gii**: генераторы кода через `bin/console.php`.

---

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

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

- PHP **7.4+**
- Apache + `mod_rewrite` (или nginx с rewrite на `web/index.php`)
- MySQL/MariaDB (если используешь модели с БД)
- Composer (рекомендуется)

---

Установка (Composer)
--------------------

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

В корне проекта:

```
composer install
composer dump-autoload -o
```

Убедись, что в `web/index.php` и `bin/console.php` подключён autoload:

```
require __DIR__ . '/../vendor/autoload.php';
```

---

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

[](#структура-проекта)

```
app/
  App.php
  Router.php
  Controller.php
  Request.php
  Response.php
  UrlManager.php
  Db.php
  ActiveRecord.php
  Query.php
  Migration.php
  ErrorHandler.php
  AuthService.php
  config/
    web.php
    db.php
  controllers/
    SiteController.php
    ErrorController.php
  console/
    ConsoleApplication.php
    CommandInterface.php
    Input.php
    Output.php
    HelpCommand.php
    MakeControllerCommand.php
    MakeModelCommand.php
    MakeCrudCommand.php
    MakeMigrationCommand.php
    MigrateCommand.php
    MakeModuleCommand.php
  helpers/
    I18n.php
    Html.php
    ActiveForm.php
    GridView.php
    DetailView.php
    LinkPager.php
    Pagination.php
    Alert.php
    Modal.php
    Session.php
    MetaTagManager.php
    NavBar.php
  assets/
    AppAsset.php
    BootstrapAsset.php
    FontAwesomeAsset.php

modules/
  admin/
    Module.php
    controllers/
      SiteController.php
    views/
      layouts/
        main.php
      site/
        index.php

views/
  layouts/
    main.php
    error.php
  site/
    index.php
    view.php
  error/
    error.php
    trace.php

web/
  index.php
  .htaccess
  assets/...

migrations/

runtime/
  logs/

```

---

Быстрый старт (OpenServer / Apache)
-----------------------------------

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

1. Размести проект в домене (например `tinymvc.loc`).
2. **DocumentRoot должен быть `.../tinymvc/web`** (важно).
3. Проверь, что `.htaccess` работает (mod\_rewrite включён).

Открой:

- `http://tinymvc.loc/` → по умолчанию `site/index`

### `web/.htaccess`

[](#webhtaccess)

```
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
```

---

Как работает запрос
-------------------

[](#как-работает-запрос)

1. `web/index.php`:

    - стартует session
    - регистрирует `ErrorHandler`
    - подключает autoload
    - создаёт `new app\App()` и вызывает `run()`
2. `App`:

    - создаёт `Request`, `Router`
    - грузит `app/config/web.php`
    - создаёт компоненты и кладёт их в `$this->`
3. `Router::resolve()`:

    - определяет `controller/action` по сегментам URL
    - если первый сегмент совпадает с папкой в `modules/` — это **module**
    - вызывает `Controller::actionX(...)` через Reflection
    - если action вернул `Response` → вызывает `send()`

---

Routing
-------

[](#routing)

Формат:

- `/{controller}/{action}`
- `/{module}/{controller}/{action}`
- параметры action берутся из `$_GET` по имени параметра

Примеры:

- `/site/view?id=5` → `SiteController::actionView($id)`
- `/admin/site/index` → `modules\admin\controllers\SiteController::actionIndex()`

---

Контроллеры
-----------

[](#контроллеры)

Файл: `app/controllers/SiteController.php`
Класс: `SiteController`
Методы: `actionIndex()`, `actionView($id)`, и т.д.

Пример:

```
namespace app\controllers;

use app\Controller;

class SiteController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index', ['title' => 'Hello']);
    }

    public function actionView(int $id)
    {
        return $this->render('view', ['id' => $id]);
    }
}
```

---

Views и Layouts
---------------

[](#views-и-layouts)

- View: `views//.php`
- Layout: `views/layouts/main.php` (по умолчанию)

Для модулей:

- View: `modules//views//.php`
- Layout: `modules//views/layouts/main.php`

Рендер из контроллера:

- `render($view, $params)` — view + layout
- `renderPartial($view, $params)` — только view

---

Компоненты и конфиг
-------------------

[](#компоненты-и-конфиг)

`app/config/web.php`:

```
return [
  'components' => [
    'user' => ['class' => '\app\AuthService'],
    'urlManager' => ['class' => '\app\UrlManager'],
    'response' => ['class' => '\app\Response'],
    'lang' => ['class' => '\app\helpers\I18n'],
    'session' => ['class' => '\app\helpers\Session'],
  ],
];
```

---

i18n (переводы)
---------------

[](#i18n-переводы)

Файлы: `app/messages//.php` (`ru`, `kk`, `pr`).

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

```
use app\App;

echo App::$app->t('app', 'Hello');
```

---

База данных
-----------

[](#база-данных)

### Настройка

[](#настройка)

`app/config/db.php`:

```
return [
  'dsn' => 'mysql:host=localhost;dbname=auth;charset=utf8',
  'user' => 'root',
  'password' => 'root',
];
```

> Важно: не храни реальные пароли в git. Вынеси в `.env`/`db.local.php` и добавь в `.gitignore`.

---

Console Gii (консольные генераторы)
-----------------------------------

[](#console-gii-консольные-генераторы)

Показать список команд:

```
php bin/console.php help
```

### make:controller

[](#makecontroller)

```
php bin/console.php make:controller Site
# или в модуль:
php bin/console.php make:controller Site --module=admin
```

### make:model

[](#makemodel)

```
php bin/console.php make:model User --table=user
```

### make:crud

[](#makecrud)

```
php bin/console.php make:crud User --table=user
# CRUD внутрь модуля:
php bin/console.php make:crud User --table=user --module=admin --force
```

Опции:

- `--table=...` — обязательно (если модель не умеет `tableName()`).
- `--controller=Имя` — имя контроллера (без `Controller`).
- `--modelNamespace=app\models` — где искать модель (по умолчанию `app\models`).
- `--module=admin` — генерирует **внутрь `modules/admin`** и строит ссылки `/admin//`.
- `--force` — перезаписать файлы.

> Важно: `make:model` и `make:crud` требуют рабочее подключение к БД (`Db::getInstance()`), иначе не смогут прочитать схему таблицы.

---

Модули
------

[](#модули)

### make:module

[](#makemodule)

Создаёт модуль со стартовым контроллером/вьюшкой/лейаутом:

```
php bin/console.php make:module admin
```

Создаст:

- `modules/admin/Module.php`
- `modules/admin/controllers/SiteController.php`
- `modules/admin/views/layouts/main.php`
- `modules/admin/views/site/index.php`

Проверка:

- открой `/admin/site/index`

---

Миграции
--------

[](#миграции)

### make:migration

[](#makemigration)

Создаёт файл миграции в папке `migrations/`:

```
php bin/console.php make:migration create_user_table
```

### migrate

[](#migrate)

Применяет/откатывает миграции. Состояние хранится в таблице `migration` (по умолчанию).

Применить все новые миграции:

```
php bin/console.php migrate
```

Откатить последнюю миграцию:

```
php bin/console.php migrate down 1
```

Опции:

- `--dir=migrations` — папка миграций
- `--table=migration` — имя таблицы для учёта применённых миграций

### Базовый класс Migration

[](#базовый-класс-migration)

Файл: `app/Migration.php`. В миграциях доступны хелперы:

- `createTable($table, $columns, $options)`
- `dropTable($table)`
- `addColumn($table, $column, $type)`
- `dropColumn($table, $column)`
- `createIndex($name, $table, $columns, $unique=false)`
- `dropIndex($name, $table)`

Типы:

- `$this->pk()`, `$this->int()`, `$this->bool()`, `$this->string($len)`, `$this->text()`, `$this->datetime()`, `$this->timestamp()`, `$this->decimal($p,$s)`
- модификаторы: `$this->notNull()`, `$this->defaultValue($v)`, `$this->defaultExpr('CURRENT_TIMESTAMP')`

---

Безопасность
------------

[](#безопасность)

Сейчас в проекте может встречаться **plain-text** работа с паролями. Для реального проекта:

- используй `password_hash()` / `password_verify()`
- вынеси секреты (DB, токены) из репозитория
- исключи логи и конфиги из git

Рекомендуемый `.gitignore`:

```
/vendor/
runtime/logs/
.env
app/config/db.local.php
```

---

Лицензия
--------

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

Apache License 2.0 — см. файл `LICENSE`.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance95

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 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 ~3 days

Total

7

Last Release

29d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8471433dba12b4ed46f6f35d6a5661caf74d01046e7d0ed40e4ac5de1f967a83?d=identicon)[deepn9x](/maintainers/deepn9x)

---

Top Contributors

[![remetulla17771](https://avatars.githubusercontent.com/u/42893646?v=4)](https://github.com/remetulla17771 "remetulla17771 (10 commits)")

### Embed Badge

![Health badge](/badges/remetulla-tinymvc-php/health.svg)

```
[![Health](https://phpackages.com/badges/remetulla-tinymvc-php/health.svg)](https://phpackages.com/packages/remetulla-tinymvc-php)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k6.0M781](/packages/sylius-sylius)[elgg/elgg

Elgg is an award-winning social networking engine, delivering the building blocks that enable businesses, schools, universities and associations to create their own fully-featured social networks and applications.

1.7k17.3k100](/packages/elgg-elgg)[bowphp/framework

The bow PHP Framework

6018.0k14](/packages/bowphp-framework)[laravel/nova-devtool

Devtool for Laravel Nova Development

32724.3k205](/packages/laravel-nova-devtool)[verbb/formie

The most user-friendly forms plugin for Craft.

101400.6k79](/packages/verbb-formie)[alleyinteractive/mantle-framework

A framework for powerful WordPress development

28353.6k2](/packages/alleyinteractive-mantle-framework)

PHPackages © 2026

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