Skip to content

ApnaPHP - A Next.js App Router style + Laravel inspired PHP framework with file-based routing

License

alsocoders/ApnaPHP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ApnaPHP

Latest Version

Ready-to-use starter template for ApnaPHP Framework - A modern PHP framework inspired by Next.js App Router and Laravel.

πŸš€ 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-framework

πŸƒβ€β™‚οΈ 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

use ApnaPHP\Routing\Request;
use ApnaPHP\Routing\Response;

class UsersHandler
{
    public function GET(Request $request)
    {
        return Response::json(['users' => User::all()]);
    }
    
    public function POST(Request $request)
    {
        $user = User::create($request->all());
        return Response::json($user, 201);
    }
}

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 model
php apna make:model Post

# Create new route
php apna make:route products

# 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

πŸ”§ 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
    ],
];

🀝 Contributing

We appreciate your interest! However, please note:

  • βœ… You can use this framework to build applications
  • βœ… You can report bugs and issues
  • βœ… You can suggest features
  • ❌ Direct modifications to the framework core are not accepted
  • ❌ Derivative works of the framework are not permitted

For feature requests and bug reports, please open an issue on GitHub.

πŸ“„ License

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

Important: You may use this framework to build applications, but you are NOT permitted to modify, alter, or create derivative works of the framework itself without explicit written permission.

πŸ™ Acknowledgments

πŸ“ž Support


Made with ❀️ by Also Coder (Dinesh Gupta)

Β© 2025 Also Coder. All rights reserved.

About

ApnaPHP - A Next.js App Router style + Laravel inspired PHP framework with file-based routing

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages