Create Routes Using Classes
Note: For complete setup instructions including Server configuration, see Setup.
Creating routes with classes provides better organization, testability, and reusability compared to closures. This approach is recommended for production applications with complex business logic.
Basic Example
Step 1: Define the Route
<?php
use ByJG\RestServer\Route\RouteList;
use ByJG\RestServer\Route\Route;
use ByJG\RestServer\OutputProcessor\XmlOutputProcessor;
$routeDefinition = new RouteList();
$routeDefinition->addRoute(
Route::get("/api/data")
->withOutputProcessor(XmlOutputProcessor::class)
->withClass(\My\ClassName::class, "getData")
);
Step 2: Create the Handler Class
<?php
namespace My;
use ByJG\RestServer\HttpResponse;
use ByJG\RestServer\HttpRequest;
class ClassName
{
/**
* @param HttpResponse $response
* @param HttpRequest $request
*/
public function getData(HttpResponse $response, HttpRequest $request)
{
$response->write(['result' => 'ok']);
}
}
Using Route Factory Methods
RestServer provides factory methods for GET, POST, PUT and DELETE. For any other method use
Route::create() (or new Route()), which accepts a string or a ByJG\WebRequest\HttpMethod case:
<?php
use ByJG\RestServer\Route\Route;
// GET request
$routeDefinition->addRoute(
Route::get("/api/users")->withClass(UserController::class, "list")
);
// POST request
$routeDefinition->addRoute(
Route::post("/api/users")->withClass(UserController::class, "create")
);
// PUT request
$routeDefinition->addRoute(
Route::put("/api/users/{id}")->withClass(UserController::class, "update")
);
// DELETE request
$routeDefinition->addRoute(
Route::delete("/api/users/{id}")->withClass(UserController::class, "delete")
);
// Any other method
$routeDefinition->addRoute(
Route::create('PATCH', "/api/users/{id}")->withClass(UserController::class, "patch")
);
Route Parameters
Access route parameters in your class methods:
<?php
namespace My;
use ByJG\RestServer\HttpResponse;
use ByJG\RestServer\HttpRequest;
class UserController
{
public function getUser(HttpResponse $response, HttpRequest $request)
{
$userId = $request->attribute('id');
// Fetch user data...
$response->write(['user_id' => $userId]);
}
}
When to Use Class-Based Routes
Best for:
- Production applications
- Complex business logic
- Code that needs testing
- Reusable controllers
- Team collaboration
Consider alternatives for:
- Simple endpoints → Use Closures
- Modern PHP projects → Use PHP Attributes
Additional Configuration
For information on:
- Output processors: See Output Processors
- Route metadata: See Route Metadata
- Route patterns: See Defining Route Names
- Complete setup: See Setup