1. Go to this page and download the library: Download rockberpro/rosa-router library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rockberpro / rosa-router example snippets
Bootstrap::setup(); // loads ./.env
Bootstrap::setup('config/.env'); // custom path
Bootstrap::setup('config/.ini'); // INI format
// index.php
use Rockberpro\RosaRouter\Bootstrap;
('path/to/.ini');
Bootstrap::setup();
$server = Server::init();
// '/api' is the default base prefix — pass a different one to change it
// (see the "Base prefix" section). isApiEndpoint() runs first, so it must
// be given the same prefix.
if ($server->isApiEndpoint('/api')) {
$server->loadRoutes('./routes/api.php', '/api');
$server->execute(Server::MODE_STATELESS);
}
// server.php — run with: php server.php
use Rockberpro\RosaRouter\Utils\DotEnv;
use Rockberpro\RosaRouter\Bootstrap;
use React\Socket\SocketServer;
use React\Http\HttpServer;
erver = Server::init();
// '/api' is the default base prefix — pass a different one to change it
$server->loadRoutes('./routes/api.php', '/api');
$server = new HttpServer(
$server->execute(Server::MODE_STATEFUL)
);
$server->on('error', function (Throwable $e) {
print("Request error: " . $e->getMessage() . PHP_EOL);
});
$socket = new SocketServer("{$address}:{$port}");
$server->listen($socket);
print("Server running at http://{$address}:{$port}" . PHP_EOL);
use Rockberpro\RosaRouter\Core\Request;
use Rockberpro\RosaRouter\Core\Response;
use Rockberpro\RosaRouter\Core\Route;
Route::get('/ping', function (Request $request) {
return new Response(['message' => 'pong'], Response::OK);
});
$request->getPathParam('id'); // route placeholders, e.g. {id}
$request->getQueryParam('page'); // ?page=2
$request->getBodyParam('email'); // JSON body fields
$request->getParams(); // everything, grouped by source
return new Response(['message' => 'Created'], Response::CREATED); // 201
return new Response(['message' => 'Not found'], Response::NOT_FOUND); // 404
return new Response(['message' => 'Invalid'], Response::UNPROCESSABLE_ENTITY); // 422
$server->loadRoutes('./routes/api.php', '/v1'); // routes served under /v1
$server->loadRoutes('./routes/admin.php', '/admin'); // routes served under /admin
if ($server->isApiEndpoint('/v1')) {
$server->loadRoutes('./routes/api.php', '/v1');
$server->execute(Server::MODE_STATELESS);
}
Route::prefix('v1')->group(function() {
Route::get('/users/{id}', [UserController::class, 'get']); // GET /api/v1/users/{id}
Route::post('/users', [UserController::class, 'post']); // POST /api/v1/users
});
Route::prefix('v1')->group(function() {
Route::get('/users/{id}', [UserController::class, 'get']); // GET /api/v1/users/{id}
Route::post('/users', [UserController::class, 'post']); // POST /api/v1/users
Route::prefix('users/{user}')->group(function() {
Route::get('/posts', [PostController::class, 'index']); // GET /api/v1/users/{user}/posts
Route::post('/posts', [PostController::class, 'store']); // POST /api/v1/users/{user}/posts
});
});
namespace App\Middleware;
use Closure;
use Rockberpro\RosaRouter\Middleware\MiddlewareInterface;
use Rockberpro\RosaRouter\Core\Request;
use Rockberpro\RosaRouter\Core\Response;
class AuthMiddleware implements MiddlewareInterface
{
public function handle(Request $request, Closure $next): Response
{
if (!$request->get('token')) {
return new Response(['message' => 'Access denied'], Response::UNAUTHORIZED);
}
return $next($request);
}
}
// Single route
Route::middleware(AuthMiddleware::class)
->get('/hello', 'HelloWorldController@hello');
// Whole group
Route::prefix('v1')
->middleware(AuthMiddleware::class)
->namespace('App\\Controllers')
->group(function() {
Route::get('/hello', 'HelloWorldController@hello');
});
Route::middleware(LogRequestMiddleware::class) // applies to everything below
->group(function() {
Route::get('/health', 'HealthController@check'); // [Log]
Route::middleware(AuthMiddleware::class)
->group(function() {
// runs [Log, Auth] — logging is NOT lost by the inner group
Route::get('/user/{id}', 'UserController@get');
});
});
use Rockberpro\RosaRouter\Middleware\LogRequestMiddleware;
Route::prefix('v1')
->middleware(LogRequestMiddleware::class)
->group(function() {
Route::get('/hello', 'HelloWorldController@hello');
});
use Monolog\Handler\SlackWebhookHandler;
use Monolog\Logger;
use Rockberpro\RosaRouter\Bootstrap;
Bootstrap::setup(
'.env',
'logs/info.log',
'logs/error.log',
// request/info handlers — e.g. mirror requests into your own DB schema,
// Slack, syslog, Elasticsearch, …
infoHandlers: [new SlackWebhookHandler($webhookUrl, level: Logger::INFO)],
);
namespace App\Controllers;
use Rockberpro\RosaRouter\Controllers\Controller;
use Rockberpro\RosaRouter\Core\Request;
use Rockberpro\RosaRouter\Core\Response;
class UserController extends Controller
{
public function get(Request $request): Response
{
$id = $request->get('id');
// ... fetch the user from your data source
if (!$id) {
return $this->response(['message' => 'User not found'], Response::NOT_FOUND);
}
return $this->response(['id' => $id, 'name' => 'Jane Doe'], Response::OK);
}
}
// Explicit method binding
Route::get('/user/{id}', [UserController::class, 'get']);
// Group actions under one controller
Route::controller(UserController::class)->group(function() {
Route::get('/user/{id}', 'get');
Route::post('/user', 'post');
});
namespace App\Middleware;
use Closure;
use Rockberpro\RosaRouter\Middleware\MiddlewareInterface;
use Rockberpro\RosaRouter\Core\Request;
use Rockberpro\RosaRouter\Core\Response;
use Rockberpro\RosaRouter\Core\Server;
use Rockberpro\RosaRouter\Jwt;
class AuthMiddleware implements MiddlewareInterface
{
public function handle(Request $request, Closure $next): Response
{
Jwt::validate(Server::authorization(), 'access'); // throws on failure
return $next($request);
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.