Skip to content

Latest commit

 

History

History
235 lines (175 loc) · 4.34 KB

File metadata and controls

235 lines (175 loc) · 4.34 KB

Framework Examples

This document provides practical examples of using the AngeGroup Framework.

Basic Routing

use framework\Http\Route;
use framework\Http\Response;

// Simple route
Route::get('/', function() {
    return new Response('Welcome!');
});

// Route with parameters
Route::get('/user/{id}', function(Request $request) {
    $id = $request->routeParams['id'];
    return new Response("User ID: $id");
});

// Route to controller
Route::get('/home', [HomeController::class, 'index']);

Controllers

<?php
namespace App\Controllers;

use framework\Core\Controller;
use framework\Http\Request;
use framework\Http\Response;

class UserController extends Controller {
    public function index(Request $request): Response {
        $users = []; // Fetch users
        return new Response(json_encode($users), 200, [
            'Content-Type' => 'application/json'
        ]);
    }

    public function show(Request $request): Response {
        $id = $request->routeParams['id'];
        // Fetch user by ID
        return new Response("User: $id");
    }
}

Middleware

<?php
namespace App\Middleware;

use framework\Http\Request;
use framework\Http\Response;
use framework\Middleware\MiddlewareInterface;

class AuthMiddleware implements MiddlewareInterface {
    public function handle(Request $request, callable $next): Response {
        if (!Auth::check()) {
            return new Response('Unauthorized', 401);
        }
        return $next($request);
    }
}

Validation

use framework\Validation\Validator;
use framework\Validation\ValidationException;

$validator = new Validator($request->all(), [
    'email' => 'required|email|max:255',
    'password' => 'required|min:8',
    'age' => 'required|integer|min:18|max:100',
]);

if (!$validator->passes()) {
    throw new ValidationException($validator->errors());
}

// Process validated data
$email = $request->input('email');

File System

use framework\FileSystem\Storage;

// Public files
$public = Storage::disk('public');
$public->put('images/photo.jpg', $imageData);
$url = asset('images/photo.jpg');

// Encrypted storage
$private = Storage::disk('private');
$private->put('secrets/data.txt', $sensitiveData);
$data = $private->get('secrets/data.txt');

// Cache
$cache = Storage::disk('cache');
$cache->put('key', 'value', 3600); // TTL in seconds

Authentication

use framework\Auth\Auth;

// Login
if (Auth::login($email, $password)) {
    $user = Auth::user();
    // User is authenticated
}

// Check authentication
if (Auth::check()) {
    $userId = Auth::id();
    $user = Auth::user();
}

// Logout
Auth::logout();

// Check permissions
if (Auth::can('admin.users.edit')) {
    // User has permission
}

Views

use framework\View\View;

$view = new View(__DIR__ . '/views', 'layout');

$html = $view->render('home', [
    'title' => 'Welcome',
    'users' => $users
]);

Configuration

use framework\Core\Config;

$config = new Config(__DIR__ . '/config');

// Get value
$appName = $config->get('app.name');

// Get with default
$timeout = $config->get('app.timeout', 30);

// Check if exists
if ($config->has('app.debug')) {
    $debug = $config->get('app.debug');
}

Database (Example)

use framework\Database\DB;

// Connect
DB::connect([
    'driver' => 'sqlite',
    'database' => __DIR__ . '/database.sqlite',
]);

// Query
$users = DB::query('SELECT * FROM users WHERE active = ?', [1]);

// Execute
DB::execute('INSERT INTO users (name, email) VALUES (?, ?)', [
    'John Doe',
    'john@example.com'
]);

Error Handling

use framework\Exceptions\ExceptionHandler;

// Register exception handler
new ExceptionHandler(devMode: true);

// Custom exceptions
throw new NotFoundHttpException('Page not found');
throw new ForbiddenHttpException('Access denied');

Artisan Commands

Create custom commands:

<?php
namespace App\Console;

use framework\Console\Command;

class MyCustomCommand extends Command {
    public function getName(): string {
        return 'my:command';
    }

    public function getDescription(): string {
        return 'My custom command description';
    }

    public function handle(array $args): void {
        $this->info('Command executed!');
    }
}

Register in Artisan:

$artisan = new Artisan();
$artisan->registerCommand(new MyCustomCommand());