数据库未在codeigniter中的特定类型的404路由上自动加载
我有一个名为数据库未在codeigniter中的特定类型的404路由上自动加载,codeigniter,routes,http-status-code-404,autoload,Codeigniter,Routes,Http Status Code 404,Autoload,我有一个名为Hello.php的控制器,它只有一个名为world的方法。控制器在construct时间和world函数echohello world启动事务并提交事务 class Hello extends CI_Controller { public function __construct() { parent::__construct(); $this->db->trans_begin; } public functi
Hello.php
的控制器,它只有一个名为world
的方法。控制器在construct
时间和world
函数echohello world
启动事务并提交事务
class Hello extends CI_Controller {
public function __construct() {
parent::__construct();
$this->db->trans_begin;
}
public function world(){
echo "hello world";
$this->db->trans_commit;
}
}
请注意:我的数据库已从config/autoload.php中自动加载,并带有$autoload['libraries']=array('database')代码>
从config/routes.php
中,我将404错误路由到名为bad_parameters.php的控制器,其中$route['404_override']='bad_parameters'
现在我要做三件事:
调用hello/world
-期望hello-world
,然后提交
调用hello/fake
-预期404路由,然后在回滚前调用-在回滚后调用
调用fake/fake
-预期404路由,然后在回滚前调用-在回滚后调用
相反,情况就是这样
调用hello/world
-获取hello-world
,然后按预期提交
调用hello/fake
-回滚前获取
load->database()在bad_parameters.php
的构造函数中,第2点按预期显示“回滚前-回滚后”,没有任何错误
尽管2号和3号都是404路由,但3号示例运行良好,但2号示例存在此问题。为什么会这样?我已经在自动加载我的数据库了 您正在使用哪个CI版本?尝试更新您的CI版本
在CI 2.1.0中,修复了一个错误(反应堆19),其中1)在某些情况下忽略404#U覆盖路由,2)当控制器存在但请求的方法不存在时,404#U覆盖控制器无法使用自动加载库
我在这里找到了一个解决方案:
为了保留这一答案:
替换(system/core/CodeIgniter.php)第292行:
show_404("{$class}/{$method}");
使用(system/core/CodeIgniter.php)第292行:
// Check and see if we are using a 404 override and use it.
if ( ! empty($RTR->routes['404_override']))
{
$x = explode('/', $RTR->routes['404_override']);
$class = $x[0];
$method = (isset($x[1]) ? $x[1] : 'index');
}
else
{
show_404("{$class}/{$method}");
}
并替换(system/core/Router.php)第273行:
if (!empty($this->routes['404_override']))
使用(system/core/Router.php)第273行:
if ( ! empty($this->routes['404_override']))
你看过你的PHP错误日志了吗?应该会出现500个错误我发现了一些。。。db->trans\u rollback()存在问题。。。让我更新这个问题。在我提到的第2点,PHP执行正在停止,因为第2点没有发生trans_回滚。您看到的trans_回滚错误是什么?好的。。。。。我又挖了更多。。。。。。。我意识到这是一个自动加载问题。。。。。数据库未自动加载。。。。。。我正在更新这个问题,你可以添加一个pre_系统钩子来纠正它。既然你提到了它,我注意到在我用404路由定义的框架中也发生了类似的事情。可能是应用程序流中的错误。路由是应该发生的第二件事,但是修改系统
文件夹中的文件不是一件不可能的事。。。不…?at说大多数用户永远不需要这样做,但是对于那些想要显著改变CodeIgniter核心的用户来说,替换或扩展它们的选项确实存在。因此,您可以编写一个alterator类来替换原始方法,并且您仍然不会修改核心文件。我给您的更改将是在alterator类中覆盖哪些方法的一个路径点。我使用的是CI 2.0.3-也许这是主要问题。将尝试升级到CI 2.1.0,并稍后进行评论。
if ( ! empty($this->routes['404_override']))