Skip to content

baremetalphp/framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

52 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Bare Metal PHP Framework

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

License PHP Version Packagist Version Downloads Stars Code Size

Inspired By Laravel Lightweight

Caution

This framework is NOT PRODUCTION READY. This is a limited feature framework intended as a learning tool/playground for developers.

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

Quick Start

Creating a New Project

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

composer create-project baremetalphp/baremetalphp [your-project]

cd [your-project]

php mini migrate
php mini serve

Note: The framework defaults to a SQLite database, but you can set up a MySQL connection in .env (PostgreSQL is ~95% functional but not fully tested).

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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •