Rudra Framework
#[Routing(url: '')]
public function index(): void
{
// ...
}#[Routing(url: 'page/:slug')]
public function page(string $slug)#[Routing(url: 'page/:slug')]
#[Routing(url: 'page/:slug/category/:id')]
public function page(string $slug = 'home', int $id = 1): void
{
// ...
}#[Routing(url: 'named3/:[\d]{1,3}')]
#[Routing(url: 'namestr/:[a-z]{1,3}')]#[Routing(url: 'read/:id', method: 'GET')]
public function read(int $id)#[Routing(url: 'create/:id', method: 'POST')]
public function create(int $id)#[Routing(url: 'update/:id', method: 'PUT|PATCH')]
public function update(int $id)#[Routing(url: 'delete/:id', method: 'DELETE')]
public function delete(int $id)#[Routing(url: 'any/:id', method: 'GET|POST|PUT|PATCH|DELETE')]
public function any(int $id)✅ Также можно указывать маршруты напрямую в файле routes.php контейнера.
⚠️Чтобы избежать автоматической регистрации маршрутов через атрибуты, файл routes.php должен возвращать пустой массив:
return [];use Rudra\Router\RouterFacade as Router;
use App\Containers\Web\Controller\IndexController;// Ручная регистрация через фасад
Router::get('hello/:name', function ($name) {
echo "Hello $name!";
});Router::get('web/index', [IndexController::class, 'actionIndex']);Router::get('web/index', [IndexController::class, 'actionIndex'], [
'before' => [BeforeMiddleware::class],
'after' => [AfterMiddleware::class]
]);Router::set([
'url' => 'web/index',
'method' => 'GET',
'controller' => IndexController::class,
'action' => 'actionIndex'
]);Router::set([
'url' => 'web/index',
'method' => 'GET',
'controller' => IndexController::class,
'action' => 'actionIndex',
'middleware' => [
'before' => [BeforeMiddleware::class],
'after' => [AfterMiddleware::class]
]
]);// REST-маршруты:
Router::resource('api/:id', RestController::class);
// GET → read(), POST → create(), PUT → update(), DELETE → delete()
// Свои имена методов:
Router::resource('api/:id', MainController::class, [
'actionIndex', 'actionAdd', 'actionUpdate', 'actionDrop'
]);⚠️ Примечание для legacy-проектов: если в config/setting.local.yml установлено attributes: false, маршруты можно объявлять через DocBlock-аннотации:
/**
* @Routing(url="page/:slug", method="GET")
*/