alsocoder/apnaphp-framework

ApnaPHP Framework - A Next.js App Router style + Laravel inspired PHP framework

Installs: 14

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/alsocoder/apnaphp-framework

v1.0.0 2025-10-09 18:22 UTC

This package is not auto-updated.

Last update: 2025-11-20 18:49:28 UTC


README

Latest Version

A modern PHP framework inspired by Next.js App Router and Laravel, featuring file-based routing, Laravel-like ORM, and multiple database support.

๐Ÿš€ Features

  • File-based Routing: Next.js App Router style routing with .apna.php files
  • Laravel-like ORM: Eloquent-inspired models with schema definition
  • Multiple Database Support: MySQL, MariaDB, PostgreSQL, MongoDB, SQLite
  • Auto-migration: Automatic schema creation from model definitions
  • Middleware Support: Hierarchical middleware system
  • Console Commands: Built-in CLI with php apna serve
  • Modern PHP: PHP 8.1+ with modern syntax and features

๐Ÿ“ฆ Installation

Using Composer

composer create-project alsocoder/apnaphp my-app
cd my-app

Manual Installation

composer require alsocoder/apnaphp

๐Ÿƒโ€โ™‚๏ธ Quick Start

1. Create a New Project

composer create-project alsocoder/apnaphp my-app
cd my-app

2. Configure Database

Edit .env file:

DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=password

3. Start Development Server

php apna serve

Your application will be available at http://localhost:3000

๐Ÿ“ Project Structure

my-app/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ api/                 # API routes
โ”‚   โ”‚   โ””โ”€โ”€ users/
โ”‚   โ”‚       โ””โ”€โ”€ route.apna.php
โ”‚   โ”œโ”€โ”€ dashboard/           # Page routes
โ”‚   โ”‚   โ””โ”€โ”€ page.apna.php
โ”‚   โ””โ”€โ”€ layout.apna.php      # Layout files
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ app.php
โ”‚   โ””โ”€โ”€ database.php
โ”œโ”€โ”€ models/
โ”‚   โ””โ”€โ”€ User.php
โ”œโ”€โ”€ public/
โ”‚   โ””โ”€โ”€ index.php
โ””โ”€โ”€ storage/
    โ”œโ”€โ”€ cache/
    โ”œโ”€โ”€ logs/
    โ””โ”€โ”€ uploads/

๐Ÿ›ฃ๏ธ Routing

File-based Routing

Create routes by adding .apna.php files:

API Routes (app/api/*/route.apna.php):

<?php

namespace App\Api\Users;

use ApnaPHP\Routing\Request;
use ApnaPHP\Routing\Response;
use App\Models\User;

class UsersHandler
{
    public function GET(Request $request)
    {
        return Response::json([
            'success' => true,
            'users' => User::all()
        ]);
    }
    
    public function POST(Request $request)
    {
        $user = User::create($request->all());
        return Response::json([
            'success' => true,
            'user' => $user
        ], 201);
    }
    
    public function PUT(Request $request)
    {
        $id = $request->param('id');
        $user = User::find($id);
        $user->update($request->all());
        return Response::json([
            'success' => true,
            'user' => $user
        ]);
    }
    
    public function DELETE(Request $request)
    {
        $id = $request->param('id');
        $user = User::find($id);
        $user->delete();
        return Response::json([
            'success' => true,
            'message' => 'User deleted successfully'
        ]);
    }
}

Page Routes (app/*/page.apna.php):

<?php
$users = User::all();
?>
<!DOCTYPE html>
<html>
<head>
    <title>Users</title>
</head>
<body>
    <h1>Users</h1>
    <?php foreach ($users as $user): ?>
        <div><?= $user->name ?></div>
    <?php endforeach; ?>
</body>
</html>

๐Ÿ—„๏ธ Database & Models

Model Definition

<?php

namespace App\Models;

use ApnaPHP\Database\Model;

class User extends Model
{
    protected $table = 'users';
    protected $autoMigrate = true;
    
    protected $schema = [
        'name' => 'required|type:string|length:255',
        'email' => 'required|unique|type:string|length:255',
        'phone' => 'nullable|type:string|length:20',
        'age' => 'type:integer|min:18|max:120|default:18',
        'status' => 'type:string|in:active,inactive|default:active'
    ];
    
    protected $fillable = ['name', 'email', 'phone', 'age'];
    protected $hidden = ['password'];
}

Database Operations

// Create
$user = User::create([
    'name' => 'John Doe',
    'email' => 'john@example.com'
]);

// Find
$user = User::find(1);
$user = User::where('email', 'john@example.com')->first();

// Update
$user->name = 'Jane Doe';
$user->save();

// Delete
$user->delete();

// Query Builder
$users = User::where('status', 'active')
    ->where('age', '>', 18)
    ->orderBy('name')
    ->limit(10)
    ->get();

๐Ÿ—ƒ๏ธ Database Support

MySQL/MariaDB

DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=my_app
DB_USERNAME=root
DB_PASSWORD=password

PostgreSQL

DB_DRIVER=postgresql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=my_app
DB_USERNAME=postgres
DB_PASSWORD=password

MongoDB

DB_DRIVER=mongodb
DB_HOST=localhost
DB_PORT=27017
DB_DATABASE=my_app

SQLite

DB_DRIVER=sqlite
DB_DATABASE=storage/database/database.sqlite

๐Ÿ› ๏ธ Console Commands

# Start development server
php apna serve

# Create new page
php apna make:page about

# Create new API route
php apna make:route users

# Create new model
php apna make:model Post

# Create new middleware
php apna make:middleware AuthMiddleware

# Create new migration
php apna make:migration create_posts_table

# List all routes
php apna routes

# Show version
php apna --version

# Show help
php apna help

๐Ÿ”ง Configuration

Application Config (config/app.php)

<?php

return [
    'name' => env('APP_NAME', 'ApnaPHP Application'),
    'env' => env('APP_ENV', 'production'),
    'debug' => env('APP_DEBUG', false),
    'url' => env('APP_URL', 'http://localhost'),
    'timezone' => env('APP_TIMEZONE', 'UTC'),
];

Database Config (config/database.php)

<?php

return [
    'default' => env('DB_DRIVER', 'mysql'),
    
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', 3306),
            'database' => env('DB_DATABASE', ''),
            'username' => env('DB_USERNAME', ''),
            'password' => env('DB_PASSWORD', ''),
        ],
        // ... other connections
    ],
];

๐Ÿงช Testing

# Run tests
composer test

# Run with coverage
composer test-coverage

# Static analysis
composer phpstan

# Code style check
composer cs-check

๐Ÿ“š Documentation

๐Ÿค Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ“ž Support

Made with โค๏ธ by Also Coder (Dinesh Gupta)