【问题标题】:CodeIgniter Controller breaks when calling parent constructorCodeIgniter 控制器在调用父构造函数时中断
【发布时间】:2013-09-09 22:53:43
【问题描述】:

我在 helloworld.php 中有以下代码:

<?php

class Helloworld extends CI_Controller {

public function __construct()
{
    parent::__construct();
}

public function index()
{
    $this->load->model("helloworld_model");
    $data["result"] = $this->Helloworld_model->getData();
    $data["page_title"] = "CI Helloworld appis";
    $this->load->view("helloworld_view", $data);
}

}

?>

代码在调用父构造函数后停止执行,没有给出任何错误消息。 /var/log/apache2/error.log 中也没有出现任何内容。如果我在构造函数调用之前回显某些内容,则会回显它。如果我在构造函数调用之前输入乱码,则会打印出正确的错误消息。为什么会这样?

该站点在带有 Code Igniter 2.1.4 的 Ubuntu 服务器 12.04 上运行。和 PHP 5.3。

其他文件是helloworld_model.php:

<?php

class Helloworld_model extends CI_Model {

public function __construct()
{
    parent::__construct();
    $this->load->database();
}

public function getData()
{
    $query = $this->db->get("data");

    if ($query->num_rows() > 0)
    {
        return $query->row_array();
    }
    else
    {
        show_error("Database is empty");
    }
}

}

?>

还有helloworld_view.php:

<html>
<head>
    <title><?php echo $page_title ?></title>
</head>

<body>
    <?php foreach($result as $row): ?>
        <h3><?php echo $row["title"]?></h3>
        <p><?php echo $row["text"]?></p>
        <br />
    <?php endforeach ?>

</body>
</html>

据我所知,Controller 构造函数是绝对首先被调用的,所以我认为在这个阶段其余的文件并不重要(?)。

【问题讨论】:

  • 请显示其余代码。当您执行parent::__construct(); echo 'Hello'; 时会发生什么?您是否还启用了错误报告并启用了display_errors
  • 父构造函数调用后没有打印任何内容。 display_errors 开启,所有其他错误都正常打印。稍后,我将发布我的其余代码。
  • 将构造函数全部移除会发生什么?我注意到您在页面底部关闭了 php 标签,尝试从控制器底部删除关闭 php 标签和任何空格。
  • @Jeemusu 如果我删除构造函数并且在其他函数中也没有打印任何内容,页面上绝对不会出现任何内容。删除结束标签会导致解析错误。删除空白没有任何作用。
  • 我是在一个非常糟糕的教程之后开始执行此操作的,该教程有很多错误,并且适用于旧版本的 CI,但我尝试在使用 2.1.4 的过程中对其进行修复。我想我只是要从更新的教程重新开始,因为我只是不明白这有什么问题。

标签: php codeigniter


【解决方案1】:

我遇到了同样的问题,通过将 'dbdriver' =&gt; 'mysqli' 更改为 'dbdriver' =&gt; 'mysql' 在你的 config/database.php 中解决了这个问题。还要确保您的数据库连接参数正确。

【讨论】:

  • 对于php56,我从mysql改为mysqli。
  • 我将它从 'mysql' 更改为 'mysqli' 并且问题已修复。
【解决方案2】:

我的猜测是,我必须查看您的配置才能确定,您的 Loader 的初始化存在问题。大多数情况下,这与自动加载的库有关,有时与错误的数据库配置有关。我的第一个建议是尝试使用默认配置使某些东西正常工作。如果这行得通,那么您就有了一个很好的起点。

【讨论】:

  • 确实,当我重新开始时,我遇到了同样的问题,但现在只有当我在模型中加载数据库时才会发生这种情况。我想我是按照这封信的指示来做的,而且它没有给出任何错误消息,而且只是来自这个,这也无济于事。
  • 好吧我还是不知道是什么导致了原来的问题,但是这个db相关的问题通过安装php5-mysql包解决了。
猜你喜欢
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多