codeigniter4 / CodeIgniter4

Open Source PHP Framework (originally from EllisLab)
https://codeigniter.com/
MIT License
5.33k stars 1.9k forks source link

Bug: Inconsistent hostname/subdomain limitation in Routing #7214

Open kenjis opened 1 year ago

kenjis commented 1 year ago

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

iRedds commented 1 year ago

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.

kenjis commented 1 year ago

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?

iRedds commented 1 year ago

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.

ping-yee commented 1 year ago

So... is there a consensus here?