This document provides practical examples of using the AngeGroup Framework.
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']);<?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");
}
}<?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);
}
}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');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 secondsuse 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
}use framework\View\View;
$view = new View(__DIR__ . '/views', 'layout');
$html = $view->render('home', [
'title' => 'Welcome',
'users' => $users
]);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');
}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'
]);use framework\Exceptions\ExceptionHandler;
// Register exception handler
new ExceptionHandler(devMode: true);
// Custom exceptions
throw new NotFoundHttpException('Page not found');
throw new ForbiddenHttpException('Access denied');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());