@@ -1208,4 +1208,109 @@ public function testRouteToWithoutSubdomainNot()
12081208 $ this ->assertEquals ('/i/sth ' , $ routes ->reverseRoute ('doc_item ' , 'sth ' ));
12091209 }
12101210
1211+ //--------------------------------------------------------------------
1212+ // Tests for router overwritting issue
1213+ // @see https://github.com/codeigniter4/CodeIgniter4/issues/1692
1214+
1215+ public function testRouteOverwritingDifferentSubdomains ()
1216+ {
1217+ $ _SERVER ['REQUEST_METHOD ' ] = 'GET ' ;
1218+ $ _SERVER ['HTTP_HOST ' ] = 'doc.domain.com ' ;
1219+
1220+ $ routes = $ this ->getCollector ();
1221+ $ router = new Router ($ routes );
1222+
1223+ $ routes ->setDefaultNamespace ('App\Controllers ' );
1224+ $ routes ->setDefaultController ('Home ' );
1225+ $ routes ->setDefaultMethod ('index ' );
1226+
1227+ $ routes ->get ('/ ' , 'App\Controllers\Site\CDoc::index ' , ['subdomain ' => 'doc ' , 'as ' => 'doc_index ' ]);
1228+ $ routes ->get ('/ ' , 'Home::index ' , ['subdomain ' => 'dev ' ]);
1229+
1230+ $ expects = '\App\Controllers\Site\CDoc ' ;
1231+
1232+ $ this ->assertEquals ($ expects , $ router ->handle ('/ ' ));
1233+ }
1234+
1235+ public function testRouteOverwritingTwoRules ()
1236+ {
1237+ $ _SERVER ['REQUEST_METHOD ' ] = 'GET ' ;
1238+ $ _SERVER ['HTTP_HOST ' ] = 'doc.domain.com ' ;
1239+
1240+ $ routes = $ this ->getCollector ();
1241+ $ router = new Router ($ routes );
1242+
1243+ $ routes ->setDefaultNamespace ('App\Controllers ' );
1244+ $ routes ->setDefaultController ('Home ' );
1245+ $ routes ->setDefaultMethod ('index ' );
1246+
1247+ $ routes ->get ('/ ' , 'App\Controllers\Site\CDoc::index ' , ['subdomain ' => 'doc ' , 'as ' => 'doc_index ' ]);
1248+ $ routes ->get ('/ ' , 'Home::index ' );
1249+
1250+ // the second rule applies, so overwrites the first
1251+ $ expects = '\App\Controllers\Home ' ;
1252+
1253+ $ this ->assertEquals ($ expects , $ router ->handle ('/ ' ));
1254+ }
1255+
1256+ public function testRouteOverwritingTwoRulesLastApplies ()
1257+ {
1258+ $ _SERVER ['REQUEST_METHOD ' ] = 'GET ' ;
1259+ $ _SERVER ['HTTP_HOST ' ] = 'doc.domain.com ' ;
1260+
1261+ $ routes = $ this ->getCollector ();
1262+ $ router = new Router ($ routes );
1263+
1264+ $ routes ->setDefaultNamespace ('App\Controllers ' );
1265+ $ routes ->setDefaultController ('Home ' );
1266+ $ routes ->setDefaultMethod ('index ' );
1267+
1268+ $ routes ->get ('/ ' , 'Home::index ' );
1269+ $ routes ->get ('/ ' , 'App\Controllers\Site\CDoc::index ' , ['subdomain ' => 'doc ' , 'as ' => 'doc_index ' ]);
1270+
1271+ $ expects = '\App\Controllers\Site\CDoc ' ;
1272+
1273+ $ this ->assertEquals ($ expects , $ router ->handle ('/ ' ));
1274+ }
1275+
1276+ public function testRouteOverwritingMatchingSubdomain ()
1277+ {
1278+ $ _SERVER ['REQUEST_METHOD ' ] = 'GET ' ;
1279+ $ _SERVER ['HTTP_HOST ' ] = 'doc.domain.com ' ;
1280+
1281+ $ routes = $ this ->getCollector ();
1282+ $ router = new Router ($ routes );
1283+
1284+ $ routes ->setDefaultNamespace ('App\Controllers ' );
1285+ $ routes ->setDefaultController ('Home ' );
1286+ $ routes ->setDefaultMethod ('index ' );
1287+
1288+ $ routes ->get ('/ ' , 'Home::index ' , ['as ' => 'ddd ' ]);
1289+ $ routes ->get ('/ ' , 'App\Controllers\Site\CDoc::index ' , ['subdomain ' => 'doc ' , 'as ' => 'doc_index ' ]);
1290+
1291+ $ expects = '\App\Controllers\Site\CDoc ' ;
1292+
1293+ $ this ->assertEquals ($ expects , $ router ->handle ('/ ' ));
1294+ }
1295+
1296+ public function testRouteOverwritingMatchingHost ()
1297+ {
1298+ $ _SERVER ['REQUEST_METHOD ' ] = 'GET ' ;
1299+ $ _SERVER ['HTTP_HOST ' ] = 'doc.domain.com ' ;
1300+
1301+ $ routes = $ this ->getCollector ();
1302+ $ router = new Router ($ routes );
1303+
1304+ $ routes ->setDefaultNamespace ('App\Controllers ' );
1305+ $ routes ->setDefaultController ('Home ' );
1306+ $ routes ->setDefaultMethod ('index ' );
1307+
1308+ $ routes ->get ('/ ' , 'Home::index ' , ['as ' => 'ddd ' ]);
1309+ $ routes ->get ('/ ' , 'App\Controllers\Site\CDoc::index ' , ['hostname ' => 'doc.domain.com ' , 'as ' => 'doc_index ' ]);
1310+
1311+ $ expects = '\App\Controllers\Site\CDoc ' ;
1312+
1313+ $ this ->assertEquals ($ expects , $ router ->handle ('/ ' ));
1314+ }
1315+
12111316}
0 commit comments