mitsuki/controller

The core controller component for the Mitsuki framework, providing automated action resolution using Mitsuki Attributes and HTTP components.

Maintainers

Package info

github.com/zgeniuscoders/mitsuki-controller

pkg:composer/mitsuki/controller

Statistics

Installs: 9

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.0.1 2026-02-20 15:49 UTC

This package is auto-updated.

Last update: 2026-02-20 15:50:51 UTC


README

Core controller layer for the Mitsuki Framework.

This package provides the base controller abstraction and the automatic controller discovery system used by the Mitsuki Router. It integrates seamlessly with the mitsuki/attributes package to build your routing table from PHP 8 Attributes.

โœจ Features

  • Automatic Controller Discovery: Recursively scans your project to find valid controllers.
  • Attribute-Driven: Fully compatible with #[Controller] and #[Route] attributes.
  • Zero Configuration: No manual controller registration required.
  • Lightweight & Framework-Oriented: Designed specifically for the Mitsuki ecosystem.
  • Tested & Reliable: Includes automated tests for discovery edge cases.

๐Ÿš€ Installation

Install via Composer:

composer require mitsuki/controller

Requires mitsuki/attributes for controller and route metadata.

๐Ÿ›  Usage

1๏ธโƒฃ BaseController

The BaseController provides convenient helper methods to create HTTP responses.

use Mitsuki\Controller\BaseController;

class UserController extends BaseController
{
    public function index()
    {
        return $this->response('<h1>Hello World</h1>');
    }

    public function api()
    {
        return $this->json(['status' => 'ok']);
    }
}

Available Helpers

response($body, int $status = 200, array $headers = []): Response

Creates a standard HTTP response.

  • Default Content-Type: text/html
  • Fully customizable headers

json($data, int $status = 200, array $headers = []): JsonResponse

Creates a JSON response.

  • Automatically encodes data to JSON
  • Automatically sets Content-Type: application/json

2๏ธโƒฃ ControllerResolver

The ControllerResolver is responsible for automatically discovering controllers inside your project.

use Mitsuki\Controller\Resolvers\ControllerResolver;

$resolver = new ControllerResolver(__DIR__ . '/src');
$controllers = $resolver->resolve();

๐Ÿ” How Controller Discovery Works

A class is considered a controller if:

  1. It is decorated with #[Controller]
  2. OR it contains at least one method decorated with #[Route]

The resolver:

  1. Recursively scans the provided root directory.

  2. Ignores:

    • Non-PHP files
    • Directories
    • The vendor/ directory
  3. Extracts the Fully Qualified Class Name (FQCN).

  4. Uses PHP ReflectionClass to inspect attributes.

  5. Returns a unique list of valid controllers.

๐Ÿ— Architecture

Project Source Directory
        โ†“
ControllerResolver
        โ†“
ReflectionClass
        โ†“
#[Controller] / #[Route]
        โ†“
Mitsuki Router builds routing table

This keeps your routing system:

  • Decoupled
  • Clean
  • Fully metadata-driven

๐Ÿงช Testing

The package includes automated tests that verify:

  • โœ… Detection of classes with #[Controller]
  • โœ… Detection of classes with #[Route] methods
  • โœ… Ignoring classes without Mitsuki attributes
  • โœ… Ignoring the vendor/ directory
  • โœ… Handling invalid directories safely

Example test scenario:

#[Controller('/admin')]
class AdminController {}
class BlogController {
    #[Route('blog_index', '/blog', ['GET'])]
    public function index() {}
}

๐Ÿ“ฆ Package Structure

src/
 โ”œโ”€โ”€ BaseController.php
 โ””โ”€โ”€ Resolvers/
     โ””โ”€โ”€ ControllerResolver.php

๐Ÿค Contributing

To contribute:

  1. Fork the repository.
  2. Improve or extend the resolver logic.
  3. Add or update tests.
  4. Submit a Pull Request.

๐Ÿ“„ License

This project is licensed under the MIT License.

Maintained by Zgenius Matondo GitHub: https://github.com/zgeniuscoders