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

0.1.0 2025-10-19 18:23 UTC

This package is auto-updated.

Last update: 2025-12-19 18:50:56 UTC


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." 😄