Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nue Framework

A lightweight, modular and extensible PHP MVC Framework built from scratch.

Overview

Nue is a lightweight PHP framework designed for developers who want a clean architecture without the overhead of large frameworks.

The framework follows modern software engineering principles and provides its own core components while keeping external dependencies to a minimum. It is intended to be simple, educational, and highly extensible.


Core

  • Lightweight architecture
  • Modular design
  • MVC Architecture
  • Layered Architecture
  • Composer Autoloading

HTTP

  • HTTP Request
  • HTTP Response
  • Routing System
  • Route Dispatcher
  • Middleware Pipeline

Dependency Injection

  • Custom Dependency Injection Container
  • Constructor Injection
  • Automatic Dependency Resolution
  • Method Injection

Database

  • Doctrine DBAL Integration
  • Query Builder
  • CRUD Operations
  • Repository Pattern
  • Database Abstraction

View

  • BladeOne Template Engine
  • Blade Syntax
  • Layout Support
  • Sections
  • Components

Architecture

  • Controller Layer
  • Service Layer
  • Repository Layer
  • Database Layer
  • View Layer

Project Structure

Nue/
├── src/
│   ├── Container/
│   ├── Database/
│   ├── Http/
│   ├── Middleware/
│   ├── Router/
│   ├── View/
│   └── ...
│
├── NueDev/
│   ├── bootstrap/
│   ├── public/
│   ├── config/
│   └── Blog/
│
└── vendor/

Request Lifecycle

Browser
   │
   ▼
public/index.php
   │
   ▼
Application
   │
   ▼
Router
   │
   ▼
Route Dispatcher
   │
   ▼
Middleware
   │
   ▼
Controller
   │
   ▼
Service
   │
   ▼
Repository
   │
   ▼
Database
   │
   ▼
BladeOne View
   │
   ▼
Response

Example

Route

$router->get('/blog', [BlogController::class, 'index']);

$router->get('/blog/create', [BlogController::class, 'create']);

$router->post('/blog', [BlogController::class, 'store']);

Controller

final class BlogController
{
    public function __construct(
        private BlogService $service,
        private ViewInterface $view
    ) {}

    public function index(): string
    {
        return $this->view->render('index', [
            'posts' => $this->service->all(),
        ]);
    }
}

Repository

final class BlogRepository
{
    public function __construct(
        private Database $database
    ) {}

    public function all(): array
    {
        return $this->database
            ->table('blogs')
            ->get();
    }
}

Simple

<?php

use Nue\Application;
use Nue\Container\Container;
use Nue\Http\JsonResponse;
use Nue\Http\Request;
use Nue\Middleware\MiddlewareInterface;
use Nue\Router\Router;

/*
|--------------------------------------------------------------------------
| Create Container
|--------------------------------------------------------------------------
*/

$container = new Container();

/*
|--------------------------------------------------------------------------
| Register Services
|--------------------------------------------------------------------------
*/

$container->singleton(
    DateTime::class,
    fn () => new DateTime()
);

/*
|--------------------------------------------------------------------------
| Create Router
|--------------------------------------------------------------------------
*/

$router = new Router();

/*
|--------------------------------------------------------------------------
| Sample Middleware
|--------------------------------------------------------------------------
*/

final class ApiMiddleware implements MiddlewareInterface
{
    public function handle(
        Request $request,
        Closure $next
    ): mixed {
        // Check API Key

        if (
            $request->header('X-API-Key') !== 'nue-secret'
        ) {
            return new JsonResponse([
                'success' => false,
                'message' => 'Unauthorized'
            ], 401);
        }

        return $next($request);
    }
}

/*
|--------------------------------------------------------------------------
| Register Route
|--------------------------------------------------------------------------
*/

$router
    ->get('/api/time', function (
        DateTime $date
    ) {

        return new JsonResponse([
            'success' => true,
            'framework' => 'Nue',
            'version' => '1.0',
            'time' => $date->format('Y-m-d H:i:s')
        ]);

    })
    ->middleware(ApiMiddleware::class);

/*
|--------------------------------------------------------------------------
| Create Application
|--------------------------------------------------------------------------
*/

$app = new Application(
    $container,
    $router
);

/*
|--------------------------------------------------------------------------
| Run
|--------------------------------------------------------------------------
*/

$app->run();

Sample Module

The repository includes a simple Blog module demonstrating:

  • List Posts
  • Create Post
  • View Post
  • Edit Post
  • Delete Post

The module showcases how Routing, Controllers, Services, Repositories, Database, and Views work together within the framework.


Technologies

  • PHP 8+
  • Composer
  • Doctrine DBAL
  • BladeOne
  • Reflection API

Requirements

  • PHP 8.2+
  • Composer
  • MySQL / Sqlite

License

MIT License.

About

micro php framework

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages