php - 从 CodeIgniter 1.7.3 转换到 2.0+

标签 php codeigniter upgrade compatibility codeigniter-2

您好,感谢阅读。

开门见山:我有一个使用 CodeIgniter 1.7.3 构建的网站项目,我非常喜欢使用它,但是我一直在考虑升级到 CI 2.0+。

我尝试了直接复制,只是将 Controller 、模型和 View 的文件夹移到了 CI 2.0 框架中,但是当我尝试查看我的页面时出现了 500 服务器错误。

在做了一些调查后,我发现你所有的 Controller 现在都必须使用“CI_Controller”作为它们的父类。我还注意到,如果你想在你的 Controller 类中包含一个构造函数,它必须使用语法“function __construct()”作为它的名称和父类。似乎 CI 2.0+ 不再支持使用与类名同名的构造函数,例如不再支持“class Blogs extends CI_controller{ function Blogs(){parent::__construct();}}”? 我一直在阅读 CI 更改日志,但我看到的只是错误修复和新功能,与旧版本 CI 的兼容性问题无关吗? 还有其他人知道任何其他 secret 小陷阱吗?

谢谢,

H

最佳答案

CI 2.x 删除了与 PHP4 的所有兼容性,还更新了一些标准以与 future 的 PHP 5.3 兼容。其中之一是您遇到的构造函数问题。从 PHP 5.3 开始,函数 ClassName() 不再是类的构造函数,它只是另一个函数。您必须显式声明一个 __construct 函数来执行创建该类的新实例时需要完成的任何任务。鉴于此,您应该会发现在子构造函数中调用 parent::ClassName() 不再有意义,因为该函数将不再是父构造函数。

我最近不得不解决的另一个问题是现在如何处理 $_GET 数组。在 1.x 版本中,您可以使用查询字符串传回额外信息,并且仍然使用 URI 段路由到 Controller 和函数。这对于 AJAX 调用特别有用,您可能并不总是知道在特定请求中发送到服务器和从服务器发送的所有参数。在 2.x 版本中,config.php 文件包含一个新选项,$config['allow_get_array']。如果您想使用查询字符串,则必须将其设置为 TRUE,否则输入类会清除 $_GET 数组作为每个请求的 CI 初始化例程的一部分。

config/autoload.php 中的新选项不是陷阱,但您可能会发现它很有用,它允许您向项目添加新的应用程序目录。如果您使用 CI 处理多个不同的项目并希望将您编写的任何有用的库保存在一个位置,您现在可以将该位置添加到 $autoload['packages']。 CI 期望此数组中的任何路径都包含子目录“controllers”、“models”、“libraries”和“helpers”。如果您没有这些目录,它不会提示,但您至少需要它们来加载您打算加载的任何内容,即库将与主应用程序文件夹一样位于/libraries 中。

关于php - 从 CodeIgniter 1.7.3 转换到 2.0+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6393982/

相关文章:

php - Codeigniter:将 activeRecord 与手动查询相结合?

visual-studio - Visual Studio 2008 : Is it worth the upgrade from 2005?

php - 在 echo 语句中使用循环

php - 如何调用位于 public_html 之外的 php 文件

php - laravel 在 gmail 无法正常工作的服务器上发送邮件

php - centos中一次执行php文件100000次

php - 从外部文件访问 codeigniter session 值

javascript - (codeigniter) 使用jquery调用 Controller 在 View 内加载 View

postgresql - CREATE OPERATOR public.=> PostgreSQL 9.4.20 备份到 PostgreSQL 11.1 还原时出错

upgrade - PageSpeed Insights于2020年5月27日完成升级