sonypradana/php-mvc

Very light php mvc, include cli easyer to creat controller view and model quikly

Installs: 105

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 2

Forks: 0

Open Issues: 0

Type:project

pkg:composer/sonypradana/php-mvc

v2.1.0 2025-10-14 07:37 UTC

README

Total Downloads Latest Stable Version License

🚀 PHP MVC Skeleton

Welcome to php-mvc, a minimal MVC framework designed to streamline your PHP development process. This lightweight framework offers essential features for building web applications while maintaining simplicity and ease of use.

🪐 Feature

  • MVC structure
  • Application Container (power with php-di)
  • Router Support
  • Models builder
  • Query builder
  • CLI command
  • Service Provider and Middleware
  • Templator (template engine)

🎯 Quick Start (4 Steps)

1️⃣ Create Your Project

composer create-project sonypradana/php-mvc project-name

2️⃣ Jump In

cd project-name

3️⃣ Build Assets

npm install
npm run build

4️⃣ Launch!

php cli serve

That's it! Your app is now running. Let's build something awesome.

🎓 Building Your First Feature

We'll create a user profile feature from scratch.

Step 1: Create Database Schema

php cli make:migration profiles
php cli db:create  # Only if database doesn't exist yet

Define your table structure:

// database/migration/<timestamp>_profiles.php
Schema::table('profiles', function (Create $column) {
    $column('user')->varChar(32);
    $column('real_name')->varChar(100);
    $column->primaryKey('user');
})

Run the migration:

php cli migrate

Step 2: Generate Your Model

php cli make:model Profile --table-name profiles

Step 3: Create a Controller

php cli make:controller Profile

Add your logic:

// app/Controller/ProfileController.php
public function index(MyPDO $pdo): Response
{
    return view('profile', [
        'name' => Profile::find('pradana', $pdo)->real_name
    ]);
}

Step 4: Design Your View

php cli make:view profile
// resources/views/profile.template.php
{% extend('base/base.template.php') %}
{% section('title', 'Welcome {{ $name }}') %}

{% section('content') %}
    <h1>Hello, {{ $name }}! 👋</h1>
{% endsection %}

Step 5: Register Your Route

// route/web.php
Router::get('/profile', [ProfileController::class, 'index']);

Done! Visit /profile and see your work in action.

🔥 Pro Move: API with Attributes

Skip the route files entirely. Use attributes for clean, self-documented APIs:

php cli make:services Profile
// app/Services/ProfileServices.php
#[Get('/api/v1/profile')]
#[Name('api.v1.profile')]
#[Middleware([AuthMiddleware::class])]
public function index(MyPDO $pdo): array
{
    $data = Cache::remember('profile', 3600, fn () => [
        'name'   => Profile::find('pradana', $pdo)->real_name,
        'status' => 200,
    ]);

    return JsonResponse($data);
}

then register this route attribute.

Router::register([
    ProfileServices::class,
    // add more class
]);

This automatically creates your route with middleware—no extra configuration needed!

Equivalent traditional route:

Route::get('/api/v1/profile', [ProfileServices::class, 'index'])
    ->name('api.v1.profile')
    ->middleware([AuthMiddleware::class]);

⚡ Performance Optimization

Ready for production? Cache everything:

php cli view:cache    # Cache compiled templates
php cli config:cache  # Cache configuration
php cli route:cache   # Cache all routes

Your app will thank you with blazing-fast response times.

📄 License

Open source under the MIT License. Build something amazing!