首页 > 解决方案 > 是什么导致 CI​​4 中出现这种奇怪的路由问题

问题描述

我开始认为我在这里遗漏了一些非常简单的东西,但只是看不到它,尽管自 CI2 以来一直使用 PHP 和 CI 进行编码。我一直在思考这个问题将近 48 小时。

在 Mac 上的本地 MAMP 环境和共享托管平台上,以下路由代码行为异常。Allow_rewrite 已打开,并且 .htaccess 文件正在工作。该代码最初是使用 CI4 的 alpha 版本开发的,现在通过 Composer 更新到 CI4.0.4。

在 /config/routes.php 我有:

$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true); //This has been tried true and false
 
/**
 * --------------------------------------------------------------------
 * Route Definitions
 * --------------------------------------------------------------------
 */
$routes->get('/', 'Home::index');
$routes->get('/dashboard', 'Users::dashboard', ['as' => 'dashboard']);

这工作正常,并路由到仪表板,没有 index.php 文件的证据,一切正常。

但是,一旦路由定义更改为:

$routes->get('/', 'Home::index');
$routes->get('/dashboard/news/(:num)', 'Users::newsstory/$1');
$routes->get('/dashboard/account', 'Users::accountsettings');
$routes->get('/dashboard', 'Users::dashboard', ['as' => 'dashboard']);

然后 /dashboard 路由仍然有效,但是当您导航到 /dashboard/account 时 - 它说找不到 Users::account。当您导航到 /dashboard/news/11 时,说找不到 Home::index。

第一级路由之外的任何东西都是错误路由。在 users 控制器中有称为仪表板、帐户设置和 newsstory($storyid) 的函数,但后两者永远不会被调用。我可以通过分解代码中的 URL 来获取段数据,但这并不能解决路由问题。

更改要分组的仪表板条目:

$routes->get('/', 'Home::index');
$routes->group('/dashboard', function($routes)
{
  $routes->get('/news/(:num)', 'Users::newsstory/$1');
  $routes->get('/account', 'Users::accountsettings');
  $routes->get('/', 'Users::dashboard', ['as' => 'dashboard']);
});

同样的事情也会发生。/dashboard/ 路由正常,其他两个 create file not found 错误,在 /dashboard/account 的情况下寻找 \App\Controllers\Dashboard::account。

我哪里错了 - 谁能告诉我?整个开发工作都被卡住了,直到我能解决这个问题!

富有的

标签: phpcodeigniter

解决方案


问题已解决。不幸的是,我不知道确切的答案,但它一定是从某个预发布版本的某个地方遗留下来的。我开始使用 4.0.0-alpha 对该站点进行编码,并在每个版本中更新了基本代码。

但是,我创建了一个新的 CI4.0.4 项目,并将所有代码移入其中,更新了配置以反映我以前的内容,现在一切正常。这证明我的代码没问题,它一定只是框架代码中某个地方的一个错误。

现在,所有内容都已提交到 GIT 存储库,并且也在最终服务器上找到。


推荐阅读