Search by

kodhe / framework

karyakode

Kodhe Framework Core - Container, Config, Foundation, Exceptions & Support

1.1.1 2026-09-29 14:39 UTC

This package is not auto-updated.

Last update: 2026-09-29 21:52:21 UTC


README

PHP Version License Version

Core Framework Components - Container, Config, Foundation, Exceptions & Support

๐Ÿ“– Deskripsi

Kodhe Framework adalah package inti yang menyediakan fondasi utama untuk aplikasi berbasis Kodhe. Package ini mencakup Dependency Injection Container, sistem konfigurasi, application bootstrap, exception handling, controller base classes, dan berbagai helper functions.

Package ini dirancang untuk bekerja seamlessly dengan package Kodhe lainnya seperti kodhe/http, kodhe/view, kodhe/database, dan lain-lain.

โœจ Fitur Utama

๐Ÿ”ง Dependency Injection Container

  • Service registration dan resolution
  • Singleton pattern support
  • Automatic dependency resolution
  • Closure-based bindings
  • Namespace-aware service naming

โš™๏ธ Configuration System

  • Multi-format config loading (PHP arrays, legacy CI3 format)
  • Module-aware configuration
  • Config caching support
  • ArrayAccess interface for easy access
  • Runtime config manipulation

๐Ÿš€ Application Foundation

  • Modern application entry point
  • Kernel bootstrapping
  • Service provider registration
  • Auto-loading integration
  • Request/Response lifecycle management

๐ŸŽฏ Service Management

  • Service Locator pattern
  • Service Manager for core components
  • Service Provider abstraction
  • Lazy loading support
  • Module service registration

๐ŸŽฎ Controller System

  • Base Controller class
  • Error handling controllers (404, exceptions)
  • Integration with HTTP layer
  • View rendering helpers

๐Ÿ› ๏ธ Exception Handling

  • Hierarchical exception classes
  • Auth exceptions
  • Database exceptions
  • HTTP exceptions
  • Middleware exceptions
  • Routing exceptions
  • Service exceptions

๐Ÿ”Œ Support Utilities

  • Autoloader (PSR-4 compatible)
  • Helper functions (global helpers)
  • Module system
  • Facade pattern support
  • Legacy CodeIgniter 3 compatibility layer
  • File/Namespace helper loaders

๐Ÿ“ฆ Instalasi

Requirements

  • PHP >= 8.1
  • Composer
  • kodhe/http package (required)

Install via Composer

composer require kodhe/framework

Package akan otomatis menginstall dependencies:

  • paragonie/random_compat ^9.99
  • kodhe/http *

Optional Packages (Suggested)

# Session handling
composer require kodhe/session

# Caching
composer require kodhe/cache

# Database & ORM
composer require kodhe/database

# Templating / Views (REQUIRED for app('view'))
composer require kodhe/view

# Form validation
composer require kodhe/validation

# User agent library
composer require kodhe/agent

๐Ÿ—๏ธ Struktur Package

framework/
โ”œโ”€โ”€ Resources/
โ”‚   โ”œโ”€โ”€ fonts/              # Font files untuk typography
โ”‚   โ””โ”€โ”€ language/           # Translation files
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ Config/
โ”‚   โ”‚   โ”œโ”€โ”€ Loaders/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ArrayLoader.php     # Load config dari array
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ PhpLoader.php       # Load config dari file PHP
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ FileLoader.php      # Load config dari file
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ LegacyLoader.php    # CI3 compatibility loader
โ”‚   โ”‚   โ”œโ”€โ”€ Config.php              # Main config class
โ”‚   โ”‚   โ”œโ”€โ”€ ConfigInterface.php     # Config contract
โ”‚   โ”‚   โ””โ”€โ”€ Setup.php               # Setup configuration
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ Container/
โ”‚   โ”‚   โ”œโ”€โ”€ Binding/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ BindingInterface.php
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ConcreteBinding.php
โ”‚   โ”‚   โ””โ”€โ”€ Container.php           # DI Container implementation
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ Controllers/
โ”‚   โ”‚   โ”œโ”€โ”€ Error/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ FileNotFound.php    # 404 handler
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ CPException.php     # Control panel exception
โ”‚   โ”‚   โ””โ”€โ”€ BaseController.php      # Base controller class
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ Exceptions/
โ”‚   โ”‚   โ”œโ”€โ”€ Auth/                   # Authentication exceptions
โ”‚   โ”‚   โ”œโ”€โ”€ Database/               # Database exceptions
โ”‚   โ”‚   โ”œโ”€โ”€ Http/                   # HTTP exceptions
โ”‚   โ”‚   โ”œโ”€โ”€ Middleware/             # Middleware exceptions
โ”‚   โ”‚   โ”œโ”€โ”€ Routing/                # Routing exceptions
โ”‚   โ”‚   โ””โ”€โ”€ Service/                # Service exceptions
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ Foundation/
โ”‚   โ”‚   โ”œโ”€โ”€ Application.php         # Main application class
โ”‚   โ”‚   โ””โ”€โ”€ Service/
โ”‚   โ”‚       โ”œโ”€โ”€ ServiceManager.php  # Core service manager
โ”‚   โ”‚       โ”œโ”€โ”€ ServiceLocator.php  # Service locator pattern
โ”‚   โ”‚       โ”œโ”€โ”€ ServiceProvider.php # Service provider abstract
โ”‚   โ”‚       โ””โ”€โ”€ ServiceHelper.php   # Service helper utilities
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ Support/
โ”‚       โ”œโ”€โ”€ Facades/                # Facade classes
โ”‚       โ”œโ”€โ”€ Helpers/                # Helper functions
โ”‚       โ”œโ”€โ”€ Loaders/
โ”‚       โ”‚   โ”œโ”€โ”€ FileHelperLoader.php
โ”‚       โ”‚   โ”œโ”€โ”€ NamespaceHelperLoader.php
โ”‚       โ”‚   โ”œโ”€โ”€ HelperLoaderFacade.php
โ”‚       โ”‚   โ””โ”€โ”€ HelperLoaderInterface.php
โ”‚       โ”œโ”€โ”€ Legacy/                 # CodeIgniter 3 compatibility
โ”‚       โ”‚   โ”œโ”€โ”€ compat/
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ hash.php
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ password.php
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ standard.php
โ”‚       โ”‚   โ”œโ”€โ”€ Security.php
โ”‚       โ”‚   โ”œโ”€โ”€ Exceptions.php
โ”‚       โ”‚   โ”œโ”€โ”€ Log.php
โ”‚       โ”‚   โ”œโ”€โ”€ LegacyOutput.php
โ”‚       โ”‚   โ”œโ”€โ”€ Benchmark.php
โ”‚       โ”‚   โ”œโ”€โ”€ URI.php
โ”‚       โ”‚   โ”œโ”€โ”€ Input.php
โ”‚       โ”‚   โ””โ”€โ”€ common.php
โ”‚       โ”œโ”€โ”€ Autoloader.php          # PSR-4 Autoloader
โ”‚       โ”œโ”€โ”€ Modules.php             # Module system
โ”‚       โ””โ”€โ”€ Helpers.php             # Global helper functions
โ”‚
โ”œโ”€โ”€ composer.json
โ”œโ”€โ”€ LICENSE
โ””โ”€โ”€ README.md

๐Ÿš€ Penggunaan

1. Application Bootstrap

<?php

require_once 'vendor/autoload.php';

use Kodhe\Framework\Foundation\Application;
use Kodhe\Framework\Container\Container;

// Create container (optional - will create default if not provided)
$container = new Container();

// Create application instance
$app = Application::create($container);

// Bootstrap the application
$app->bootstrap();

// Run the application
$app->run();

2. Dependency Injection Container

<?php

use Kodhe\Framework\Container\Container;

$container = new Container();

// Register a service
$container->bind('database', function($app) {
    return new Database\Connection([
        'host' => 'localhost',
        'user' => 'root',
        'password' => 'secret'
    ]);
});

// Register a singleton
$container->singleton('cache', function($app) {
    return new Cache\Manager();
});

// Resolve a service
$db = $container->resolve('database');
$cache = $container->resolve('cache');

// Check if service exists
if ($container->has('database')) {
    echo "Database service is registered";
}

// Get all bindings
$bindings = $container->getBindings();
$singletons = $container->getSingletonBindings();

3. Configuration Loading

<?php

use Kodhe\Framework\Config\Config;

$config = new Config();

// Load a config file
$config->load('database');

// Access config values
$dbHost = $config->item('database.default.hostname');
$dbUser = $config->item('database.default.username');

// Set config at runtime
$config->set_item('app_name', 'My Application');
$config->set_item('debug_mode', true);

// Check if config exists
if ($config->has('app_name')) {
    echo $config->item('app_name');
}

// Array access
echo $config['app_name'];
$config['debug_mode'] = false;

4. Service Providers

<?php

use Kodhe\Framework\Foundation\Service\ServiceProvider;
use Kodhe\Framework\Container\Container;

class DatabaseServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->container->singleton('db', function($app) {
            $config = $app->resolve('config');
            return new Database\Connection($config->item('database'));
        });
    }

    public function boot()
    {
        // Called after all services are registered
        $db = $this->container->resolve('db');
        $db->connect();
    }
}

// Register in Application
$app->registerProvider(DatabaseServiceProvider::class);

5. Base Controller

<?php

namespace App\Controllers;

use Kodhe\Framework\Http\Controllers\BaseController;

class UserController extends BaseController
{
    protected $middleware = ['auth'];

    public function index()
    {
        $users = $this->resolve('userModel')->getAll();
        
        return $this->response->view('users.index', [
            'users' => $users
        ]);
    }

    public function show($id)
    {
        $user = $this->resolve('userModel')->find($id);
        
        if (!$user) {
            return $this->response->notFound();
        }
        
        return $this->response->view('users.show', [
            'user' => $user
        ]);
    }
}

6. Exception Handling

<?php

use Kodhe\Framework\Exceptions\Http\HttpException;
use Kodhe\Framework\Exceptions\Auth\AuthenticationException;
use Kodhe\Framework\Exceptions\Database\QueryException;

try {
    // Some operation
    throw new HttpException(404, 'Resource not found');
    
} catch (AuthenticationException $e) {
    // Handle auth exception
    return redirect()->to('login');
    
} catch (HttpException $e) {
    // Handle HTTP exception
    return response()->json([
        'error' => $e->getMessage()
    ], $e->getStatusCode());
    
} catch (QueryException $e) {
    // Handle database exception
    log_error($e->getMessage());
    return response()->json(['error' => 'Database error'], 500);
}

7. Helper Functions

<?php

// Load a class instance
$db = load_class('Database', 'libraries');

// Get application instance
$app = kodhe();

// Access services via app() helper
$config = app('config');
$request = app('request');
$response = app('response');
$view = app('view');

// Check if running in CLI
if (is_cli()) {
    echo "Running from command line";
}

// Get config item
$baseUrl = config_item('base_url');

// Log message
log_message('info', 'User logged in');

// Show error
show_error('Something went wrong', 500);
show_404('Page not found');

8. Module System

<?php

use Kodhe\Framework\Support\Modules;

// Find module file
list($path, $file) = Modules::find('config', 'blog', 'config/');

// Load module file
$data = Modules::load_file('routes', 'blog', 'config');

// Get module path
$modulePath = Modules::locate('blog');

๐Ÿ“š Class Reference

Core Classes

Class Namespace Description
Container Kodhe\Framework\Container Dependency Injection Container
Application Kodhe\Framework\Foundation Main application entry point
Config Kodhe\Framework\Config Configuration manager
ServiceManager Kodhe\Framework\Foundation\Service Core service manager
ServiceLocator Kodhe\Framework\Foundation\Service Service locator registry
ServiceProvider Kodhe\Framework\Foundation\Service Service provider abstract
Autoloader Kodhe\Framework\Support PSR-4 autoloader
Modules Kodhe\Framework\Support Module system

Config Loaders

Class Description
ArrayLoader Load configuration from PHP arrays
PhpLoader Load configuration from PHP files
FileLoader Load configuration from files
LegacyLoader CodeIgniter 3 compatibility loader

Exception Classes

Namespace Purpose
Auth Authentication & authorization exceptions
Database Database query and connection exceptions
Http HTTP status code exceptions
Middleware Middleware pipeline exceptions
Routing Route matching and generation exceptions
Service Service resolution exceptions

Controllers

Class Description
BaseController Base controller with common functionality
FileNotFound 404 error handler controller
CPException Control panel exception handler

โš™๏ธ Konfigurasi

Config Paths

Secara default, framework mencari file konfigurasi di:

APPPATH . 'config/'

Anda dapat menambahkan path tambahan:

$config->_config_paths[] = '/path/to/custom/config';

Service Registration

Daftarkan service providers di aplikasi Anda:

$app->registerProvider(App\Providers\AppServiceProvider::class);
$app->registerProvider(App\Providers\RouteServiceProvider::class);
$app->registerProvider(App\Providers\DatabaseServiceProvider::class);

Container Configuration

$container = new Container();

// Enable/disable duplicate registration exceptions
$container->setThrowOnDuplicate(false);

// Check current setting
$throwOnDuplicate = $container->getThrowOnDuplicate();

๐Ÿงช Testing

# Install dependencies
composer install

# Run all tests
vendor/bin/phpunit

# Run specific test file
vendor/bin/phpunit tests/ContainerTest.php
vendor/bin/phpunit tests/ApplicationTest.php
vendor/bin/phpunit tests/ConfigTest.php
vendor/bin/phpunit tests/AutoloaderTest.php

# Run with coverage
vendor/bin/phpunit --coverage-html coverage/

# Run with verbose output
vendor/bin/phpunit -v

Test Coverage

Package ini mencakup unit tests untuk:

  • ContainerTest - Dependency Injection Container (register, make, singleton, bindings)
  • ApplicationTest - Application bootstrap dan lifecycle
  • ConfigTest - Configuration loading dan manipulation
  • AutoloaderTest - PSR-4 autoloading functionality

๐Ÿ”„ Migrasi dari Versi Sebelumnya

Changes in 1.1.1

  • โœ… Extracted CodeIgniter 3 Legacy Loader (LegacyLoader) ke separate package: kodhe/legacy-loader
  • โœ… FileLoader masih extends LegacyLoader untuk full CI3 compatibility
  • โœ… Framework sekarang requires kodhe/legacy-loader secara otomatis

Jika Anda upgrade dari versi sebelumnya:

composer update kodhe/framework

Legacy loader akan terinstall otomatis.

๐Ÿค Kontribusi

Kami menyambut kontribusi! Silakan:

  1. Fork repository
  2. Buat feature branch (git checkout -b feature/amazing-feature)
  3. Commit perubahan (git commit -m 'Add amazing feature')
  4. Push ke branch (git push origin feature/amazing-feature)
  5. Buka Pull Request

๐Ÿ“„ License

Kodhe Framework dilisensikan di bawah MIT License.

๐Ÿ†˜ Support

Untuk pertanyaan, issue, atau request fitur:

๐Ÿ™ Credits

Dibuat dan maintained oleh Karya Kode Team.

Special thanks to:

  • CodeIgniter 3 team untuk inspiration legacy compatibility
  • Semua contributor Kodhe Framework

Happy Coding! ๐ŸŽ‰

Made with โค๏ธ by Karya Kode