CodeIgniter 1升级CI3时MY_URI类last()方法未定义问题求助
解决CodeIgniter 3中MY_URI扩展类方法未定义的问题
我之前从CI1升级到CI3时也踩过类似的URI扩展坑,结合你的情况,给你梳理几个关键排查点和解决办法:
严格匹配文件名与类名
CI3对核心类扩展的命名规范要求比CI1严格得多,你的扩展文件必须命名为MY_URI.php(注意大小写!Linux服务器下大小写不匹配会直接导致类无法被加载),类名也必须是MY_URI,和文件名完全对应。检查子类前缀配置
打开application/config/config.php,找到$config['subclass_prefix']这个配置项,默认值是MY_。如果这个值被修改过,你的扩展类名和文件名必须同步调整,比如前缀改成App_,那类名就得是App_URI,文件名对应App_URI.php。确认
last()方法的完整实现
你贴的代码里return $this->segment...没有写完,语法不完整的方法会导致类加载异常,无法识别该方法。一个完整的last()方法应该是这样的:function last() { return $this->segment($this->total_segments()); }验证扩展类是否被正确加载
在调用last()方法的控制器里,先执行var_dump(get_class($this->uri));,如果输出是CI_URI而不是MY_URI,说明你的扩展类根本没被加载,回到前面的文件名、前缀配置问题重新排查。清除缓存重启服务
要是你用了OPcache、APC这类PHP缓存工具,旧的类文件可能被缓存了,导致新的扩展代码没生效。清空PHP缓存或者重启服务器试试,这一步经常被忽略但很有效。
内容的提问来源于stack exchange,提问作者Kevrone
相关产品推荐
相关产品推荐

