137 lines
4.3 KiB
Markdown
137 lines
4.3 KiB
Markdown
# Route Patterns
|
|
|
|
## Route File Structure
|
|
File: **app/Config/Routes.php**
|
|
|
|
## Public Routes
|
|
```php
|
|
$routes->get('/', 'Home::index');
|
|
$routes->get('/login', 'AuthController::loginPage', ['filter' => 'guest']);
|
|
$routes->post('/login', 'AuthController::login', ['filter' => 'guest']);
|
|
$routes->get('/logout', 'AuthController::logout');
|
|
$routes->patch('/setPassword', 'AuthController::setPassword');
|
|
```
|
|
|
|
## Label Routes (Public)
|
|
```php
|
|
$routes->get('label/coll/(:any)', 'LabelController::coll/$1');
|
|
$routes->get('label/dispatch/(:any)/(:any)', 'LabelController::dispatch/$1/$2');
|
|
$routes->get('label/all/(:any)', 'LabelController::print_all/$1');
|
|
```
|
|
|
|
## API Routes (Protected by Role Filter)
|
|
File: **app/Config/Routes.php** - `$routes->group('api', ...)` block
|
|
|
|
### Users Management
|
|
```php
|
|
$routes->group('users', ['filter' => 'role:0,1'], function ($routes) {
|
|
$routes->get('', 'UsersController::index'); // Get all users
|
|
$routes->post('', 'UsersController::create'); // Create user
|
|
$routes->patch('(:any)', 'UsersController::update/$1'); // Update user
|
|
$routes->delete('(:any)', 'UsersController::delete/$1'); // Delete user
|
|
});
|
|
```
|
|
|
|
### Requests
|
|
```php
|
|
$routes->group('requests', ['filter' => 'role:0,1,2,3,4'], function ($routes) {
|
|
$routes->get('', 'RequestsController::index'); // Dashboard data
|
|
$routes->get('(:any)/audit', 'ApiRequestsAuditController::show/$1'); // Audit trail
|
|
$routes->post('validate/(:any)', 'RequestsController::val/$1'); // Validate request
|
|
$routes->delete('validate/(:any)', 'RequestsController::unval/$1'); // Unvalidate request
|
|
});
|
|
```
|
|
|
|
### Validate API
|
|
```php
|
|
$routes->group('validate', ['filter' => 'role:0,1,2'], function ($routes) {
|
|
$routes->get('unvalidated', 'ApiValidateController::unvalidated'); // Get unvalidated requests
|
|
});
|
|
```
|
|
|
|
### Samples
|
|
```php
|
|
$routes->group('samples', function ($routes) {
|
|
// Collect & Show - All Roles
|
|
$routes->group('', ['filter' => 'role:0,1,2,3,4'], function ($routes) {
|
|
$routes->post('collect/(:any)', 'SamplesController::collect/$1');
|
|
$routes->get('(:any)', 'SamplesController::show/$1');
|
|
});
|
|
|
|
// Unreceive - Only Superuser (0) and Admin (1)
|
|
$routes->group('', ['filter' => 'role:0,1'], function ($routes) {
|
|
$routes->delete('receive/(:any)', 'SamplesController::unreceive/$1');
|
|
});
|
|
});
|
|
```
|
|
|
|
## Page Routes (Protected by Role Filter)
|
|
|
|
### Superuser (Role 0)
|
|
```php
|
|
$routes->group('superuser', ['filter' => 'role:0'], function ($routes) {
|
|
$routes->get('', 'Pages\SuperuserController::index');
|
|
$routes->get('users', 'Pages\SuperuserController::users');
|
|
$routes->get('validate', 'Pages\SuperuserController::validatePage');
|
|
});
|
|
```
|
|
|
|
### Admin (Role 1)
|
|
```php
|
|
$routes->group('admin', ['filter' => 'role:1'], function ($routes) {
|
|
$routes->get('', 'Pages\AdminController::index');
|
|
$routes->get('users', 'Pages\AdminController::users');
|
|
$routes->get('validate', 'Pages\AdminController::validationPage');
|
|
});
|
|
```
|
|
|
|
### Lab (Role 2)
|
|
```php
|
|
$routes->group('lab', ['filter' => 'role:2'], function ($routes) {
|
|
$routes->get('', 'Pages\LabController::index');
|
|
$routes->get('validate', 'Pages\LabController::validationPage');
|
|
});
|
|
```
|
|
|
|
### Phlebo (Role 3)
|
|
```php
|
|
$routes->group('phlebo', ['filter' => 'role:3'], function ($routes) {
|
|
$routes->get('', 'Pages\PhlebotomistController::index');
|
|
});
|
|
```
|
|
|
|
### CS (Role 4)
|
|
```php
|
|
$routes->group('cs', ['filter' => 'role:4'], function ($routes) {
|
|
$routes->get('', 'Pages\CsController::index');
|
|
});
|
|
```
|
|
|
|
## Error Handling
|
|
```php
|
|
$routes->set404Override(function () {
|
|
$response = service('response');
|
|
$response->setStatusCode(404);
|
|
echo view('errors/notfound');
|
|
});
|
|
$routes->get('/unauthorized', 'ErrorPage::unauthorized');
|
|
```
|
|
|
|
## Route Filter Order
|
|
1. **Before filters** (run before request):
|
|
- `forcehttps` - Force HTTPS
|
|
- `pagecache` - Web page caching
|
|
- `role` - Role-based access (on protected routes)
|
|
- `guest` - Guest-only (on public routes)
|
|
|
|
2. **After filters** (run after response):
|
|
- `pagecache` - Web page caching
|
|
- `performance` - Performance metrics
|
|
- `toolbar` - Debug toolbar
|
|
|
|
## Route Naming Conventions
|
|
- API endpoints: kebab-case, under `/api/` prefix
|
|
- Page routes: kebab-case, grouped by role
|
|
- Resource endpoints: standard REST pattern (`/resource/{id}`)
|
|
- Action endpoints: kebab-case, snake_case for parameters
|