【发布时间】:2012-07-22 22:15:55
【问题描述】:
我有一个名为Hello.php 的控制器,它只有一个名为world 的方法。控制器在construct 时间和world 函数回显hello 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;
}
}
请注意:我的数据库已使用 $autoload['libraries'] = array('database'); 从 config/autoload.php 自动加载
从config/routes.php,我已将我的 404 错误路由到一个名为 bad_parameters.php 的控制器,$route['404_override'] = 'bad_parameters';
class Bad_parameters extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index(){
echo "before rollback - ";
$this->db->trans_rollback();
echo "after rollback";
}
}
现在我要做三件事:
- 致电
hello/world- 期待Hello World然后提交 - 致电
hello/fake- 期待 404 路由,然后是before rollback - after rollback - 呼叫
fake/fake- 期待404路由,然后before rollback - after rollback
INSTEAD,这就是发生的事情
- 致电
hello/world- 得到Hello World然后按预期提交 - 致电
hello/fake- 获取before rollback我的问题是关于这个 - 致电
fake/fake- 按预期获得before rollback - after rollback
我在第 1 点收到的错误消息。 2是:
遇到了 PHP 错误
严重性:通知
消息:未定义的属性:Bad_parameters::$db
文件名:controllers/bad_parameters.php
这是说 $db 未定义,而我确实从 config/autoload.php 自动加载数据库。
现在,如果我在 bad_parameters.php 的构造函数中包含 $this->load->database();,则第 2 点按预期显示“回滚前 - 回滚后”,没有任何错误。
虽然 2 号和 3 号都是 404 路由,但 3 号示例工作正常,但 2 号示例存在此问题。为什么会发生这种情况?我已经在自动加载我的数据库。
【问题讨论】:
-
您查看过您的 PHP 错误日志吗?应该会出现 500 错误
-
我发现了一些东西... db->trans_rollback() 有问题... 让我更新一下问题。在我提到的第 2 点,PHP 执行正在停止,因为 trans_rollback 没有在第 2 点发生。 2
-
您看到的 trans_rollback 错误是什么?
-
好的.....我挖掘了更多.......我意识到这是一个自动加载问题......数据库没有自动加载......我正在更新问题
-
你可以添加一个 pre_system 钩子来纠正它。既然您提到了它,我注意到在定义 404 路由的框架中发生了类似的事情。可能是应用程序流程中的错误。路由是应该发生的第二件事
标签: codeigniter routes http-status-code-404 autoload