HTTP Methods
Use the method() function to match HTTP methods.
Basic Method Matching
route(method(GET), url_path('/users'), $handler);
route(method(POST), url_path('/users'), $handler);
route(method(PUT), url_path('/users'), $handler);
route(method(DELETE), url_path('/users'), $handler);
route(method(PATCH), url_path('/users'), $handler);
route(method(HEAD), url_path('/users'), $handler);
route(method(OPTIONS), url_path('/users'), $handler);
Match Any Method
Use the ALL constant to match any HTTP method:
route(ALL, url_path('/webhook'), function() {
// Handles any HTTP method
});
Prefer Explicit Methods
While ALL is available, prefer explicit methods like GET, POST, etc. This documents your API contract and makes future framework migrations easier.
Custom Method Logic
Since predicates are just booleans, you can combine them:
$isGetOrPost = method(GET) || method(POST);
route($isGetOrPost, url_path('/form'), function() {
// Handles GET and POST
});
RESTful Resource Example
routerGroup('/api', function() {
// List all users
route(method(GET), url_path('/users'), function() {
echo json_response(HTTP_OK, array('users' => get_all_users()));
});
// Get single user
route(method(GET), url_path_params('/users/:id'), function() {
$user = get_user($_GET[':id']);
echo json_response(HTTP_OK, array('user' => $user));
});
// Create user
route(method(POST), url_path('/users'), function() {
$data = json_body();
$user = create_user($data);
echo json_response(HTTP_CREATED, array('user' => $user));
});
// Update user
route(method(PUT), url_path_params('/users/:id'), function() {
$data = json_body();
$user = update_user($_GET[':id'], $data);
echo json_response(HTTP_OK, array('user' => $user));
});
// Delete user
route(method(DELETE), url_path_params('/users/:id'), function() {
delete_user($_GET[':id']);
echo json_response(HTTP_NO_CONTENT, null);
});
});