PHPackages                             sedalit/simple-mvc-framework - 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. sedalit/simple-mvc-framework

ActiveLibrary[Framework](/categories/framework)

sedalit/simple-mvc-framework
============================

v1.0.1(6mo ago)091PHP

Since Oct 12Pushed 6mo ago1 watchersCompare

[ Source](https://github.com/sedalit/simple-mvc-framework)[ Packagist](https://packagist.org/packages/sedalit/simple-mvc-framework)[ RSS](/packages/sedalit-simple-mvc-framework/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (4)Versions (4)Used By (1)

Simple MVC Framework
====================

[](#simple-mvc-framework)

[![PHP Version](https://camo.githubusercontent.com/f575af1b648be492e22e809caebece8d6ae4d5319ad769664ee7a52e1c31c939/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253345253344382e302d626c7565)](https://php.net)[![License](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)](LICENSE)[![Packagist](https://camo.githubusercontent.com/2e663e5cafbbf395dc6089b7cef73ed693f980dbae224fa205e552db7ae58d7f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f736564616c69742f73696d706c652d6d76632d6672616d65776f726b)](https://packagist.org/packages/sedalit/simple-mvc-framework)[![Downloads](https://camo.githubusercontent.com/46201959b7d843420f3b532badfe72e9b88fd557e7d495a4c13a3d283cd65f61/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f736564616c69742f73696d706c652d6d76632d6672616d65776f726b)](https://packagist.org/packages/sedalit/simple-mvc-framework)

Легковесный PHP MVC фреймворк для быстрой разработки веб-приложений, который был создан в учебно-познавательных целях. Создан с акцентом на простоту, производительность и современные практики разработки.

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

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

- **MVC Architecture** - Чистая архитектура Model-View-Controller
- **Роутинг** - Гибкая система маршрутизации с поддержкой параметров и групп
- **Middleware** - Встроенная поддержка middleware (Auth, Guest, CSRF)
- **Валидация** - Расширяемая система валидации форм
- **Database** - PDO wrapper с query builder
- **View Engine** - Простой и быстрый шаблонизатор
- **Session Management** - Управление сессиями и flash-сообщениями
- **Cache** - Файловая система кеширования
- **Mail Service** - Отправка email через PHPMailer
- **CSRF Protection** - Встроенная защита от CSRF атак
- **Service Container** - Dependency Injection контейнер
- **Environment Variables** - Поддержка .env файлов
- **Pagination** - Готовая система пагинации
- **File Upload** - Удобная работа с загрузкой файлов

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

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

- PHP &gt;= 8.0
- PDO Extension
- Composer
- Apache/Nginx с mod\_rewrite

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

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

### Создайте новый проект

[](#создайте-новый-проект)

```
composer create-project sedalit/simple-php-framework-skeleton my-app
cd my-app
```

### Настройте .env

[](#настройте-env)

```
cp .env.example .env
# Edit .env with your database credentials
```

### Запустите dev-сервер

[](#запустите-dev-сервер)

```
php -S localhost:8000 -t public
```

Откройте `http://localhost:8000` в браузере.

📖 Документация
--------------

[](#-документация)

### Маршруты

[](#маршруты)

Определите маршруты в `config/routes.php`:

```
use App\Controllers\PostController;

// Базовые маршруты
$app->router()->get('/', [IndexController::class, 'index']);
$app->router()->post('/posts', [PostController::class, 'store']);

// Маршрут с динамическими параметрами
$app->router()->get('/posts/(?\d+)', [PostController::class, 'show']);

// Маршрут с middleware
$app->router()->get('/dashboard', [DashboardController::class, 'index'], [
    AuthMiddleware::class
]);

// Группа маршрутов
$app->router()->group('/admin', [
    $app->router()->get('/users', [AdminController::class, 'users']),
    $app->router()->get('/settings', [AdminController::class, 'settings']),
])->middleware([AuthMiddleware::class]);
```

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

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

```
namespace App\Controllers;

class PostController extends BaseController
{
    public function index(): mixed
    {
        $posts = db()->findAll('posts');

        return $this->render('posts/index', ['posts' => $posts]);
    }

    public function show(): mixed
    {
        $id = router()->routeParam('id');
        $post = db()->findOrFail('posts', $id);

        return $this->render('posts/show', ['post' => $post]);
    }
}
```

### Модели

[](#модели)

```
namespace App\Models;

use PHPFramework\Model;

class Post extends Model
{
    protected array $fillable = ['title', 'content', 'user_id'];

    protected function tableName(): string
    {
        return 'posts';
    }

    protected function primaryKeyName(): string
    {
        return 'id';
    }
}

// Использование
$post = new Post();
$post->title = 'My Post';
$post->content = 'Content here';
$id = $post->save();

$post->update();
$post->delete($id);
```

### Валидация

[](#валидация)

```
$data = request()->post();

$rules = [
    'email' => 'required|email',
    'password' => 'required|min:8',
    'password_confirm' => 'required|match:password',
    'username' => 'required|min:3|max:20|unique:users',
    'avatar' => 'file|extension:jpg,png|fileSize:2MB'
];

if (!validate($data, $rules)) {
    $errors = validator()->errors();
    return $this->render('form', ['errors' => $errors]);
}
```

### Представления

[](#представления)

```
// В контроллере
return $this->render('posts/index', [
    'title' => 'All Posts',
    'posts' => $posts
]);

// В представлении (app/Views/posts/index.php)
