[ROUTER] Add mechanism for sorting the order in which core routes are loaded

This commit is contained in:
Hugo Sales 2021-09-15 15:13:30 +01:00 committed by Diogo Peralta Cordeiro
parent b26f3bca14
commit e563c393f8
Signed by: diogo
GPG Key ID: 18D2D35001FBFAB0
5 changed files with 17 additions and 0 deletions

View File

@ -56,9 +56,20 @@ class RouteLoader extends Loader
$this->rc = new RouteCollection(); $this->rc = new RouteCollection();
$route_files = glob(INSTALLDIR . '/src/Routes/*.php'); $route_files = glob(INSTALLDIR . '/src/Routes/*.php');
$to_load = [];
foreach ($route_files as $file) { foreach ($route_files as $file) {
require_once $file; require_once $file;
$ns = '\\App\\Routes\\' . basename($file, '.php'); $ns = '\\App\\Routes\\' . basename($file, '.php');
if (defined("{$ns}::LOAD_ORDER")) {
$to_load[$ns::LOAD_ORDER] = $ns;
} else {
$to_load[] = $ns;
}
}
ksort($to_load);
foreach ($to_load as $ns) {
$ns::load($this); $ns::load($this);
} }

View File

@ -38,6 +38,8 @@ use App\Core\Router\RouteLoader;
abstract class Attachments abstract class Attachments
{ {
const LOAD_ORDER = 20;
public static function load(RouteLoader $r): void public static function load(RouteLoader $r): void
{ {
$r->connect('attachment_show', '/attachment/{id<\d+>}', [C\Attachment::class, 'attachment_show']); $r->connect('attachment_show', '/attachment/{id<\d+>}', [C\Attachment::class, 'attachment_show']);

View File

@ -39,6 +39,7 @@ use App\Util\Nickname;
abstract class GSActor abstract class GSActor
{ {
const LOAD_ORDER = 30;
public static function load(RouteLoader $r): void public static function load(RouteLoader $r): void
{ {
$r->connect(id: 'gsactor_view_id', uri_path: '/actor/{id<\d+>}', target: [C\GSActor::class, 'GSActorShowId']); $r->connect(id: 'gsactor_view_id', uri_path: '/actor/{id<\d+>}', target: [C\GSActor::class, 'GSActorShowId']);

View File

@ -40,6 +40,8 @@ use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
abstract class Main abstract class Main
{ {
const LOAD_ORDER = 10;
public static function load(RouteLoader $r): void public static function load(RouteLoader $r): void
{ {
$r->connect('login', '/login', [C\Security::class, 'login']); $r->connect('login', '/login', [C\Security::class, 'login']);

View File

@ -38,6 +38,7 @@ use App\Core\Router\RouteLoader;
abstract class Note abstract class Note
{ {
const LOAD_ORDER = 40;
public static function load(RouteLoader $r): void public static function load(RouteLoader $r): void
{ {
$r->connect('note_view', '/note/{id<\d+>}', [C\Note::class, 'NoteShow']); $r->connect('note_view', '/note/{id<\d+>}', [C\Note::class, 'NoteShow']);