【问题标题】:CodeIgniter index function not triggered even though the controller has been called即使已调用控制器,CodeIgniter 索引函数也未触发
【发布时间】:2015-11-22 10:14:47
【问题描述】:

简而言之:下面的代码示例没有回显“我在这里!”它不会从 _construct 函数中回显。如果我将 echo 语句移到类上方,它将回显,因此我知道 CI 正在到达此控制器。

背景故事:

我继承了一个在 CodeIgniter 2.1.2 中完成的项目。我应该将应用程序复制到具有不同子域的另一个目录并将数据库配置指向不同的数据库。我在配置中更新了数据库。我已经更新了基础浴缸。我已将环境设置为开发,因此我可以收到错误消息。没有错误。

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
if (!ini_get('date.timezone')) {
    date_default_timezone_set('my-time-zone');
}

class Login extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('mod_login');
        $this->load->helper('date');
    }

    function index() {
         echo "Here I am!"; //Nothing echos 
    }

   function logout{
   //logout function here.
   }
}

这里有 CodeIgniter 的粉丝知道原因吗?

【问题讨论】:

  • 这是你控制器的完整代码吗?
  • 它下面还有其他函数,但没有一个被调用。另外,我没有包含 CI_Controller,因为它是标准的 codeigniter,我没有修改它。该控制器在原始应用程序的原始文件夹中工作正常,我之前添加功能没有遇到问题。
  • 逐行调试可能会遇到问题,比如在类回显中检查一些东西,如果没问题,然后在构造函数之后等等。
  • 我不确定,但可能是您的模型或助手未加载。或者只是尝试不使用加载模型和帮助程序,它是否会进入索引功能。

标签: php codeigniter codeigniter-2


【解决方案1】:

控制器的类名必须为大写。来自文档:

注意:类名必须以大写字母开头。

换句话说,这是有效的:

<?php
class Blog extends CI_Controller {

}
?>

无效有效:

<?php
class blog extends CI_Controller {

}
?> 

更多:https://ellislab.com/codeigniter/user-guide/general/controllers.html#hello

【讨论】:

  • 谢谢。它没有改变或修复任何东西,但我不想让糟糕的形式延续下去。
【解决方案2】:

你的控制器应该是这样的。

<?php    
    if (!defined('BASEPATH'))
        exit('No direct script access allowed');

    class Login extends CI_Controller
    {
        function __construct()
        {
            parent::__construct();
            $this->load->model('mod_login');
            $this->load->helper('date');

        }

        public function index()
        {
            echo "Here I am!";
        }


     }

控制器名称应为loging.php

config/routes.php

$route['default_controller'] = "login";/set default conntoller

额外说明:(删除网址中的index.php

config/config.php

$config['base_url'] = '';
$config['index_page'] = '';

.htaccess(放在应用程序文件夹之外)

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L] 
</IfModule>

【讨论】:

  • 你写的是 cho 而不是 echo。
  • 是的。没有运气。同样,需要明确的是,它到达了这个控制器,CI 正在加载 login.php,因为如果我把它放在类声明之上,就会显示 echo "Here I am"。我已经完成了 .htaccess,就像你展示的那样。
猜你喜欢
  • 1970-01-01
  • 2015-11-25
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多