coders / phastify
Like Fastify, but with more $ signs and less performance.
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/coders/phastify
Requires
- coders/events: ^0.1.0
- guzzlehttp/psr7: ^2.8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.89
- phpunit/phpunit: ^12.4
README
Like Fastify, but with more $ signs and less performance.
Phastify is a lightweight HTTP framework for PHP inspired by popular Node.js frameworks like Fastify. It provides a simple and intuitive syntax for building APIs and web applications with middleware, hooks, and routing support.
✨ Features
- 🔥 Simple routing - Fastify-style API with parameter support
- 🔧 PSR-7 compatible - Built-in PSR-7 HTTP message support
- 🎯 Hook system - Global and route-specific hooks
- 🛠️ Middleware support - Easy middleware integration
- 📝 Fluent Response API - Convenient JSON/HTML response creation
- ⚡ Event-driven - Built-in event system
📦 Installation
composer require coders/phastify
🚀 Quick Start
<?php use Coders\Phastify\Server; use Coders\Phastify\Request; use Coders\Phastify\Response; require_once 'vendor/autoload.php'; $app = new Server(); // Simple route $app->get('/api/users', function(Request $request, Response $response) { return $response->status(200)->send([ 'message' => 'Welcome to Phastify!', 'users' => ['alice', 'bob', 'charlie'] ]); }); // Route with parameters $app->get('/api/users/{id:\d+}', function(Request $request, Response $response) { $id = $request->params['id']; return $response->status(200)->send([ 'user' => [ 'id' => (int)$id, 'name' => 'User ' . $id ] ]); }); // Start the server $app->serve();
📖 Documentation
Routing
Phastify supports all standard HTTP methods:
$app->get('/path', $handler); $app->post('/path', $handler); $app->put('/path', $handler); $app->patch('/path', $handler); $app->delete('/path', $handler); $app->options('/path', $handler); // Multiple methods at once $app->route(['GET', 'POST'], '/api/health', $handler);
Route Parameters
// Basic parameters $app->get('/users/{id}', function(Request $request, Response $response) { $id = $request->params['id']; // ... }); // Parameters with regex $app->get('/users/{id:\d+}', function(Request $request, Response $response) { $id = $request->params['id']; // numbers only // ... });
Response API
// JSON response return $response->status(200)->send(['data' => 'value']); // HTML response return $response->status(200)->sendHtml('<h1>Hello World</h1>'); // Text response return $response->status(200)->sendText('Plain text'); // Redirect return $response->redirect('/login', 301); // Static methods return Response::json(['data' => 'value']); return Response::html('<h1>Hello</h1>'); return Response::text('Hello');
Hook System
Global Hooks
// Executes before each request $app->onRequest(function($event) { [$request, $response] = $event->data; echo "Request: {$request->getMethod()} {$request->getPath()}\n"; }); // Executes before handler $app->preHandler(function($event) { echo "Checking authentication...\n"; }); // Executes before sending response $app->onSend(function($event) { echo "Sending response...\n"; }); // Executes after sending response $app->onResponse(function($event) { [$request, $response] = $event->data; echo "Response sent: {$response->getStatusCode()}\n"; }); // Executes on errors $app->onError(function($event) { [$request, $response, $error] = $event->data; echo "Error: {$error->getMessage()}\n"; });
Route-specific Hooks
$route = $app->get('/api/users', $handler); $route->preHandler(function(Request $request, Response $response) { echo "Validating user data...\n"; }); $route->onSend(function(Request $request, Response $response) { echo "User operation completed\n"; });
Request API
// Basic information $method = $request->getMethod(); $path = $request->getPath(); $query = $request->getQueryParams(); $headers = $request->getHeaders(); // Body and parsed data $body = $request->getBody(); $parsedBody = $request->getParsedBody(); // Helper methods $hasToken = $request->hasValidToken(); // checks Bearer token
Middleware
use Coders\Phastify\Middleware\Middleware; class AuthMiddleware extends Middleware { public function onRequest($event) { [$request, $response] = $event->data; // authentication logic } public function preHandler($event) { // logic before handler } } // Register middleware $app->register(new AuthMiddleware());
Dispatch vs Serve
// Dispatch - returns Response object $response = $app->dispatch($request); // Serve - sends response to browser $app->serve(); // uses Request::fromGlobals() $app->serve($customRequest); // with custom request
🔧 Requirements
- PHP 8.0+
- Composer
📄 License
MIT License - see LICENSE file.
👨💻 Author
Irek Kubicki - github@ixdude.com
🤝 Contributing
Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.
🚧 Project Status
⚠️ Development version - Phastify is under active development. API may change.
"Like Fastify, but with more $ signs and less performance." 😄