remetulla/tinymvc-php
Composer 安装命令:
composer create-project remetulla/tinymvc-php
包简介
Mini MVC framework in Yii2 style
README 文档
README
Мини-фреймворк на 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/<controller>, 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/<lang>/<category>.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 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)
- Размести проект в домене (например
tinymvc.loc). - DocumentRoot должен быть
.../tinymvc/web(важно). - Проверь, что
.htaccessработает (mod_rewrite включён).
Открой:
http://tinymvc.loc/→ по умолчаниюsite/index
web/.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
Как работает запрос
-
web/index.php:- стартует session
- регистрирует
ErrorHandler - подключает autoload
- создаёт
new app\App()и вызываетrun()
-
App:- создаёт
Request,Router - грузит
app/config/web.php - создаёт компоненты и кладёт их в
$this-><key>
- создаёт
-
Router::resolve():- определяет
controller/actionпо сегментам URL - если первый сегмент совпадает с папкой в
modules/— это module - вызывает
Controller::actionX(...)через Reflection - если action вернул
Response→ вызываетsend()
- определяет
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
- View:
views/<controller>/<view>.php - Layout:
views/layouts/main.php(по умолчанию)
Для модулей:
- View:
modules/<module>/views/<controller>/<view>.php - Layout:
modules/<module>/views/layouts/main.php
Рендер из контроллера:
render($view, $params)— view + layoutrenderPartial($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 (переводы)
Файлы: app/messages/<lang>/<category>.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 (консольные генераторы)
Показать список команд:
php bin/console.php help
make:controller
php bin/console.php make:controller Site
# или в модуль:
php bin/console.php make:controller Site --module=admin
make:model
php bin/console.php make:model User --table=user
make:crud
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/<controller>/<action>.--force— перезаписать файлы.
Важно:
make:modelиmake:crudтребуют рабочее подключение к БД (Db::getInstance()), иначе не смогут прочитать схему таблицы.
Модули
make:module
Создаёт модуль со стартовым контроллером/вьюшкой/лейаутом:
php bin/console.php make:module admin
Создаст:
modules/admin/Module.phpmodules/admin/controllers/SiteController.phpmodules/admin/views/layouts/main.phpmodules/admin/views/site/index.php
Проверка:
- открой
/admin/site/index
Миграции
make:migration
Создаёт файл миграции в папке migrations/:
php bin/console.php make:migration create_user_table
migrate
Применяет/откатывает миграции. Состояние хранится в таблице migration (по умолчанию).
Применить все новые миграции:
php bin/console.php migrate
Откатить последнюю миграцию:
php bin/console.php migrate down 1
Опции:
--dir=migrations— папка миграций--table=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.
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2026-07-10