hyp*_*666 4 php compatibility codeigniter upgrade codeigniter-2
您好,感谢您的阅读.
我将直截了当地说:我有一个我使用CodeIgniter 1.7.3构建的网站项目,我非常喜欢使用它,但我一直在考虑升级到CI 2.0+.
我尝试了直接复制,只是将控制器,模型和视图的文件夹移动到CI 2.0框架,但是当我尝试查看我的页面时出现了500服务器错误.
经过一些调查后,我发现所有控制器现在都必须使用"CI_Controller"作为其父类.另外我注意到如果你想在你的控制器类中包含一个构造函数,它必须使用语法"function __construct()"作为它的名字和父类.似乎CI 2.0+不再支持使用与类名相同的构造函数,例如"类Blogs extends CI_controller {function Blogs(){parent :: __ construct();}}"不再受支持?我一直在阅读CI更改日志,但我看到的只是错误修复和新功能,没有关于旧版CI的兼容性问题?还有其他人知道任何其他秘密的小陷阱吗?
谢谢,
H
CI 2.x删除了与PHP4的所有兼容性,并且还更新了许多标准,以便与PHP 5.3保持兼容.其中一个是您遇到的构造函数问题.从PHP 5.3开始,该函数ClassName()不再是类的构造函数,它只是另一个函数.您必须显式声明一个__construct函数来执行在创建类的新实例时需要完成的任何任务.鉴于此,你应该看到调用parent::ClassName()你的子构造函数不再有意义,因为该函数将不再是父的构造函数.
我最近需要解决的另一个陷阱是如何$_GET处理数组.在1.x版本中,您可以使用查询字符串传递额外信息,并仍使用URI段路由到控制器和函数.这对于AJAX调用尤其有用,在这些调用中,您可能并不总是知道在特定请求中发送到服务器和从服务器发送的所有参数.在2.x版本中,config.php文件包含一个新选项$config['allow_get_array'].TRUE如果要使用查询字符串,则必须将其设置为" 否",否则输入类将清除$_GET数组作为每个请求的CI初始化例程的一部分.
一些不是陷阱但你可能会发现有用的是config/autoload.php中的新选项,它允许您向项目中添加新的应用程序目录.如果您使用CI处理许多不同的项目并希望保留您在单个位置编写的任何有用库,则现在可以将该位置添加到$autoload['packages'].CI期望此数组中的任何路径都包含子目录"controllers","models","libraries"和"helpers".如果您没有这些目录,它将不会抱怨,但您至少需要它们用于您想要加载的任何内容,即库将与主应用程序文件夹一样存在/库中.
所以简而言之
更新父构造函数调用
class Wow扩展CI_Controller {
Run Code Online (Sandbox Code Playgroud)function __construct() { parent::__construct(); //your stuff } function index() { // just for example } }
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |