Adding and managing HTTP routes

Routes can easily be created and managed by creating a routes.php file anywhere inside your modules directory (e.g. GXModules/<Vendor>/<Module>/routes.php). The shop software will automatically determine these files and use them to define the available HTTP routes of the application.

These routes.php will be included and therefore need to return a callback method. The first parameter of this callback method must be the Gambio\Core\Application\Routing\RouteCollector, which is used to manage the HTTP routes.

The following example shows the content of such a routes.php file and how routes can be added and modified:

Adding a GET/POST/etc. route

use Gambio\Core\Application\Routing\RouteCollector;
use GXModules\<Vendor>\<Module>\HttpActions\SampleGetAction;
use GXModules\<Vendor>\<Module>\HttpActions\SamplePostAction;

return static function (RouteCollector $routeCollector) {
    $routeCollector->get('/admin/my-module', SampleGetAction::class);
    $routeCollector->post('/admin/my-module', SamplePostAction::class);
    // ... similar for PUT, PATCH, DELETE and OPTION
};

Replace callback for an already defined route

use Gambio\Core\Application\Routing\RouteCollector;
use GXModules\<Vendor>\<Module>\HTTPActions\AnotherSampleGetAction;

return static function (RouteCollector $routeCollector) {
    $routeCollector->getDefinedRoute('/admin/my-module', 'get')->setCallback(AnotherSampleGetAction::class);
};

Add a middleware to a specific route

use Gambio\Core\Application\Routing\RouteCollector;
use GXModules\<Vendor>\<Module>\HttpActions\SampleGetAction;
use GXModules\<Vendor>\<Module>\HttpActions\SamplePostAction;
use GXModules\<Vendor>\<Module>\HttpMiddlewares\SampleGetMiddleware;
use GXModules\<Vendor>\<Module>\HttpMiddlewares\SamplePostMiddleware;

return static function (RouteCollector $routeCollector) {
    $routeCollector->get('/admin/my-module', SampleGetAction::class)->addMiddleware(SampleGetMiddleware::class);
    $routeCollector->post('/admin/my-module', SamplePostAction::class);

    // If route has been already defined 
    $routeCollector->getDefinedRoute('/admin/my-module', 'post')->addMiddleware(SampleGetMiddleware::class);
};

Add an argument to a specific route

use Gambio\Core\Application\Routing\RouteCollector;
use GXModules\<Vendor>\<Module>\HttpActions\SampleGetAction;
use GXModules\<Vendor>\<Module>\HttpActions\SamplePostAction;

return static function (RouteCollector $routeCollector) {
    $sampleArgumentName = 'argumentName';
    $sampleArgumentValue = 'argumentValue';

    $routeCollector->get('/admin/my-module', SampleGetAction::class)->addArgument($sampleArgumentName, $sampleArgumentValue);
    $routeCollector->post('/admin/my-module', SamplePostAction::class);

    // If route has been already defined 
    $routeCollector->getDefinedRoute('/admin/my-module', 'post')->addArgument($sampleArgumentName, $sampleArgumentValue);
};

Add a name to a specific route

use Gambio\Core\Application\Routing\RouteCollector;
use GXModules\<Vendor>\<Module>\HttpActions\SampleGetAction;
use GXModules\<Vendor>\<Module>\HttpActions\SamplePostAction;

return static function (RouteCollector $routeCollector) {
    $routeCollector->get('/admin/my-module', SampleGetAction::class)->setName('my-sample-get-route');
    $routeCollector->post('/admin/my-module', SamplePostAction::class);

    // If route has been already defined 
    $routeCollector->getDefinedRoute('/admin/my-module', 'post')->setName('my-sample-post-route');
};