|
本帖最后由 givemetwo 于 2015-11-18 18:21 编辑
问题描述:
当控制器类中有与控制名称相同的方法时,总是会先执行与控制器名称相同的方法,然后执行你所访问的方法。并且忽略掉控制器所继承的类
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Demo extends CI_Controller {
public function demo(){
echo 111;
}
public function demo1(){
echo 'xxx';
}
public function demo2(){
$this->load->view('welcome_message');
}
}
当访问 http://domain/demo/demo 时
会先执行与控制器名称相同的方法demo 然后执行执行你所访问的方法demo
输出 111111
当访问 http://domain/demo/demo1 时
会先执行与控制器名称相同的方法demo 然后执行执行你所访问的方法demo1
输出 111xxx
当访问 http://domain/demo/demo2 时
会先执行与控制器名称相同的方法demo 然后执行执行你所访问的方法demo2
因为会忽略掉控制器所继承的类 所以输出类似如下的错误
同理分析Index控制器,index方法的问题
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Index extends CI_Controller {public function index(){
echo 111;
}
}
如果默认控制器是 Index当访问域名时 会默认路由到Index控制器的Index方法
根据上面的分析 会执行两次index方法 输出111111
好了不BB了
解决方案1:
控制器内不要写与控制器名称相同的方法
解决方案2:
控制器内添加构造方法
代码如下:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Index extends CI_Controller {
public function __construct(){
parent::__construct();
}
public function index(){
echo 111;
$this->load->view('welcome_message');
}
}
将正确输出如下结果
|
|