baremetalphp/framework

A lightweight, educational PHP framework with service container, routing, ORM, and more

Installs: 4

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/baremetalphp/framework

v0.1.0 2025-12-06 19:51 UTC

This package is auto-updated.

Last update: 2025-12-06 21:21:26 UTC


README

A lightweight, educational PHP framework with service container, routing, ORM, migrations, and more.

Features

  • ๐ŸŽฏ Service Container - Dependency injection and service management
  • ๐Ÿ›ฃ๏ธ Routing - Clean, simple routing with middleware support
  • ๐Ÿ—„๏ธ ORM - Active Record style ORM with relationships (hasOne, hasMany, belongsTo, belongsToMany)
  • ๐Ÿ“Š Migrations - Database version control and schema management
  • ๐ŸŽจ Views - Simple templating engine with blade-like syntax
  • ๐Ÿ” Authentication - Built-in authentication helpers
  • ๐Ÿงช Testing - PHPUnit test suite included
  • โšก CLI Tools - Built-in console commands for common tasks

Requirements

  • PHP 8.0+
  • PDO extension
  • SQLite, MySQL, or PostgreSQL support

Installation

Install via Composer:

composer require elliotanderson/phpframework

Quick Start

Creating a New Project

The easiest way to get started is to use the project skeleton:

composer create-project elliotanderson/baremetal my-app

Manual Setup

  1. Require the framework:
composer require elliotanderson/phpframework
  1. Set up your application structure:
my-app/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ Http/
โ”‚   โ”‚   โ””โ”€โ”€ Controllers/
โ”‚   โ””โ”€โ”€ Models/
โ”œโ”€โ”€ bootstrap/
โ”‚   โ””โ”€โ”€ app.php
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ database.php
โ”œโ”€โ”€ public/
โ”‚   โ””โ”€โ”€ index.php
โ”œโ”€โ”€ routes/
โ”‚   โ””โ”€โ”€ web.php
โ””โ”€โ”€ composer.json
  1. Create a route (routes/web.php):
use BareMetalPHP\Routing\Router;
use BareMetalPHP\Http\Response;

return function (Router $router): void {
    $router->get('/', function () {
        return new Response('Hello, World!');
    });
};
  1. Bootstrap your application (bootstrap/app.php):
<?php

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

use BareMetalPHP\Application;

$app = new Application(__DIR__ . '/..');
$app->registerProviders([
    BareMetalPHP\Providers\ConfigServiceProvider::class,
    BareMetalPHP\Providers\DatabaseServiceProvider::class,
    BareMetalPHP\Providers\RoutingServiceProvider::class,
    BareMetalPHP\Providers\ViewServiceProvider::class,
]);

return $app;
  1. Create your entry point (public/index.php):
<?php

$app = require __DIR__ . '/../bootstrap/app.php';
$app->run();

Usage Examples

Routing

$router->get('/users', [UserController::class, 'index']);
$router->post('/users', [UserController::class, 'store']);
$router->get('/users/{id}', [UserController::class, 'show']);

Models

use BareMetalPHP\Database\Model;

class User extends Model
{
    protected $table = 'users';
    
    // Relationships
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// Usage
$user = User::find(1);
$posts = $user->posts;

Database Migrations

use BareMetalPHP\Database\Migration;

class CreateUsersTable extends Migration
{
    public function up($connection)
    {
        $this->createTable($connection, 'users', function ($table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }
    
    public function down($connection)
    {
        $this->dropTable($connection, 'users');
    }
}

Views

use BareMetalPHP\View\View;

return View::make('welcome', [
    'name' => 'World'
]);

CLI Commands

The framework includes a CLI tool (mini) with several commands:

  • php mini serve - Start the development server
  • php mini migrate - Run pending migrations
  • php mini migrate:rollback - Rollback the last migration
  • php mini make:controller Name - Create a new controller
  • php mini make:migration name - Create a new migration

Testing

composer test
# or
vendor/bin/phpunit

Documentation

For detailed documentation, visit the framework documentation.

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.