CodeIgniter4
CodeIgniter4 copied to clipboard
Bug: Inconsistent hostname/subdomain limitation in Routing
CodeIgniter version: 4.3.1
(1) hostname
takes precedence over subdomain
if a route has both:
$routes->get('/', 'Home::index');
$routes->get('/', 'Media::index', ['hostname' => 'media.example.com:8888', 'subdomain' => '*']);
http://media.example.com:8888/ci431/public/
→ App\Controllers\Media::index
http://user.example.com:8888/ci431/public/
→ App\Controllers\Home::index
(2) subdomain
takes precedence over hostname
if two routes matches:
$routes->get('/', 'Home::index');
$routes->get('/', 'Media::index', ['hostname' => 'media.example.com:8888']);
$routes->get('/', 'All::index', ['subdomain' => '*']);
http://media.example.com:8888/ci431/public/
→ App\Controllers\All::index
http://user.example.com:8888/ci431/public/
→ App\Controllers\All::index
On the forum, I already suggested the idea of creating a unique key for registering a route, like domain + path. (As it turned out, the same is used in Laravel).
This would solve the existing problem. And it would also be possible to create a cache of routes, which in my opinion would be a good solution if the application uses many modules with routes.
First of all, I think it is necessary to determine whether this is really a bug and decide what the specification should be.
What about router implementations other than Laravel?
If the "hostname" or "subdomain" options are specified and the path matches, then the route will be overwritten by the last one added. This is what happens in example 2.
If you're expecting Media::index but have All::index, then yes, it's a bug.
Symfony - route name Yii - route name ?? methods + domain + pattern That is, a unique route key is used.
As an alternative, we may not use an associative array.
So... is there a consensus here?