CodeIgniter 新闻
CodeIgniter 发布 2.1.1 版
在 CodeIgniter 2.1.0 版发布后的几个月中,我们的开发重点已经转移到 3.0 版的开发上(GitHub 上的“develop”分支)。进展很顺利,现在我们已经有单元测试,PDO 驱动,增强的 Query Builder(不再称为 Active Record 了),性能优化和各种其他新功能。
虽然离 3.0.0 稳定版的发布还有数月之遥,但我们决定先发布一个修复一些 BUG 和功能调整的 CodeIgniter 2.1.1 版。2.1.1 版虽然不会给你带来什么惊喜,但这意味着我们可以用上一个更稳定的 CodeIgniter。
- 改进文件上传类中的 MIME 类型检测。
- 提高 url_title() 的性能并改善它的输出。现在可以用任何字符串作为单词分隔符。并向后兼容“破折号”或“下划线”作为单词分隔符。
- 增加对 IPv6 的 IP 地址的支持。
- 修复了上传类在检查 MIME 类型时,错误的使用数组 KEY 的问题。
- 修复了 form_open() 所使用的 $action 是针对 site_url() 而不是 base_url() 的问题。
- 修复了在 CI_Upload::_file_mime_type() 中如果用 mime_content_type() 来检测文件类型可能会失败并返回 FALSE 的问题。
- 修复了使用图像处理类来创建一个新的文件,Windows 路径会被忽略的问题。
- 修复了当开启数据库缓存并使用 $this->db->query() 读取缓存时,已缓存的查询结果中找不到绑定变量的问题。
- 修复了在输出到浏览器之前,CSRF 的 Cookie 值允许被修改为任何(非空)字符串,使代码存在注入风险的问题。
- 修复了 PDO 将 ’dbname’ 作为连接字符串参数的时候,其不顾及数据库是否在使用中,就进行连接的行为所造成 SQLite 无法使用的问题。
- 修复了 CI_DB_pdo_result::num_rows() 在 SELECT 查询中返回不正确的值,因为它使用了 PDOStatement::rowCount()。
- 修复了 CI_Image_lib::clear() 不正确地清除所有必要的对象属性,包括宽度和高度的问题。
- 修复了 Active Record 的 from() 方法没有转义表别名的问题。
请阅读升级指南来学习如何从老版本升级。这是一个非常简单的更新,并没有任何 API 接口的变化,所以你从 2.1.0 升级到这个版本应该不会有问题。如果你把 IP 地址存储在数据库中,那么你可能需要增加这个字段的长度,以便存储更大的 IPv6 格式的 IP 地址。
点击这里下载或从 GitHub 上获取!
发布人: Hex, 日期: 2012年6月13日
介绍 Sparks
上个月刚刚在伦敦召开 CIConf 后,我想深入的了解一些 CodeIgniter 开发者中的共同话题。我发现他们在谈论如何通过简单的自动化工具提高开发效率。要做到这一点,我们要看看 CodeIgniter Sparks 项目是如何提高你的开发效率的。下面,我将通过创建一个演示站点,来演示如何访问 GitHub 的 API。
首先,什么是 Sparks?
Sparks 是一个 CodeIgniter 的包管理系统。Sparks 托管用户贡献的代码,你可以拉取到你的项目中。如果你通过 Steam 下载过游戏;通过 Homebrew 安装过软件;或使用 Ruby Gem 提高过工作效率,那么,你应该了解一个包管理系统都能为你做些什么。
为什么不是 PEAR?
PHP 有一个现成的包管理系统——PEAR。理论上,一个框架相应的包管理器应该是用该语言进行简单的封装。不幸的是,PEAR 诡异的打包方式并不是很合适。令人遗憾的是,在看到 gems、easy_install 和 npm 的成功后,PHP 标准也没有引入这些特性。
怎样获取 Sparks?
在 getsparks 网站上有安装指南。为了演示目的,我将使用安装指南中没有列出的选项:CodeIgniter Reactor 团队正在努力开发,让 Sparks 成为 CodeIgniter 的一部分,所以,我将从 GitHub 上的 sparks 分支开始。
让我们开始吧!
在你的 Web 根目录下创建一个新目录,进入这个目录,然后运行:
这样做将克隆一个 CodeIgniter Reactor 代码库的副本,并切换到 sparks 分支上。如果你通过浏览器浏览刚才自动创建的 CodeIgniter 目录,你应该看到 CodeIgniter 的欢迎页面。
接下来,让我们找到我们的第一个 Spark(译注:一个 Spark 可以理解为一个第三方类库,后面的 spark 都是这个意思)。在我们刚才创建的 CodeIgniter 目录中打开命令行,运行类似这样的命令:
例如,显示一个所有命令的列表可以这样:
如果你觉得很繁琐,那么可以用 -s 替换 --spark。
为了创建这个演示站点,我们需要访问 Github 的 API。我们知道,GitHub 的 API 是一个 RESTful API,所以,可以先用 search 命令搜索一些对我们有用的东西:
你会看到一个包的列表。restclient 这个包看起来符合要求。安装这个包也很容易:
屏幕上会显示一大堆内容。重要的内容在尾部。我们会看到 Sparks 为我们安装了 restclient 需要的 curl 库。也告诉我们刚刚安装了哪个版本。Sparks 支持 spark 的多版本共存,所以我们可以同时安装一个 spark 的多个版本。
让我们尝试一下。编辑 application/controllers/welcome.php 文件,在 index 方法的最上面加载这个 spark:
加载这个 spark 后,我们将会给 GitHub 发一个测试请求。
$this->rest->initialize(array('server' => 'https://api.github.com/'));
$repos = $this->rest->get('users/'.$user.'/repos');
var_dump($repos);
注意:可能返回 false。这可能会发生在一些本地环境中,特别是 MAMP,可能的原因是 SSL 证书问题。如果你碰到这个问题,你可以在上面代码中的 get 调用前添加以下内容:
现在我们可以得到返回数据了,但输出内容还比较凌乱。所以,我们将用视图替代 var_dump。重新命名现有视图为一个更合适的名字(比如“home”)。然后加载这个视图,并传递返回的数据给视图:
在这个视图中,通过循环 $repos 变量,我们可以让输出更美观。然后,我观察了一下前面的 dump 结果,我决定在输出中包括标题、描述和一个链到 GitHub 的链接。
<div class="project">
<h2><?php echo $repo->name?></h2>
<p><?php echo $repo->description?></p>
<a href="<?php echo $repo->html_url?>">View on Github</a>
</div>
<?php endforeach;?>
我们现在已经取得了一些成果。但是还不能满足,一个产品没有好的文档怎么能行?当然文档肯定会写的。我们先给文档添加个链接吧。在视图的循环中添加:
我们在这里使用了 URL 辅助函数,所以请先在控制器中载入它:
为实现这个功能,我们要在刚才的控制器(application/controllers/welcome.php)中创建一个方法:
GitHub 上有一个很好的约定,任何项目的根目录中的 README 文件将显示为文档。它们很多都是以 markdown 格式写成的,所以这个例子中我们尝试编写一个“README.md”文件。我们需要的功能都可以通过 GitHub 的 API 实现。
调用 rest->get() 方法时,需要运行前面的那些初始化代码,所以,我决定把这些初始化代码放到构造函数中。
我们与 git 进行交互,它本身不是文件系统,所以命名上有些奇怪,基本来说,我们可以将 tree 当作一个文件。(译注:这里如果读者不了解 git 可能会比较难理解,请先阅读一些 git 资料,这里提供一个维基百科关于 git 的链接:http://zh.wikipedia.org/wiki/Git)我们需要遍历所有文件来寻找 README.md。记住,你总是可以用 var_dump 来查看你的数据。当遍历文件的时候,我注意到 API 返回的对象结果中出现了一个新的 API URL,后面我们会用到它。
$doc_url = ‘’; foreach ($trees->tree as $info) { if ($info->path == 'README.md') { $doc_url = str_replace('https://api.github.com/', '', $info->url); break; } }
现在我们的 readme 文件有了新的 URL,我们可以随时读取文件内容。注意,文件内容已被编码,所以我们需要一个额外的步骤:
$content = base64_decode($readme->content);
我们就快成功了!我们可以传递文件内容到视图中,看起来还不错:
// view:
<?php echo $content?>
然而,我们不应该让我们的用户看到原始的 markdown 内容。让我们回到命令行,看看我们可以找到些什么:
markdown Spark 看起来很棒!让我们继续安装它。
有了这个新工具,我们可以渲染 markdown 内容:
// in the view
<?php echo parse_markdown($content)?>
现在你已经成功了!
当然,在这个网站上线后,我们不希望每个请求都访问 API,否则我们很快将遇到麻烦。因此,作为最后一步,你应该缓存这些页面:
我们编写完成的控制器应该类似于:https://gist.github.com/2029827
最后,感谢 Reactor 和 Sparks 团队开发了这么牛X的工具!
发布人: Hex, 日期: 2012年3月13日
CodeIgniter 发布 2.0.0 版
今天,EllisLab 和 CodeIgniter Reactor 的工程师们自豪的宣布:CodeIgniter 2.0.0 的第一个官方版本发布了!它有两个版本(或分支):
CodeIgniter Core 版
Core 版是一个更新较慢的分支,它是 EllisLab 商业产品的基础,例如 ExpressionEngine 和 MojoMotor。Core 版的更新频率将会与 CodeIgniter 之前的相当,这将更适用于对稳定性与版本兼容性要求较高的大型软件,或一些对 SLA 有依赖的企业级软件。Core 可在 BitBucket 下载。
CodeIgniter Reactor 版
Reactor 版是社区驱动的分支,这将更快的采纳社区提交的优秀代码。这意味着社区可以在 BitBucket 上创建一个项目的 fork,然后可以贡献 BUG 修复、新特性或完善文档等,并需要通过代码评审小组的评审。这些工程师主要负责推动框架的开发。
EllisLab 为 Core 版开发的新特性等内容将会合并入 Reactor 版中,并且 EllisLab 将积极推动 Reactor 版的发展。Reactor 版是在日常工作中推荐使用的版本。当你在本站看到“CodeIgniter”时,它指的是 CodeIgniter Reactor 版。在下载、文档和论坛中都反映出了这种变化。简单地说,Reactor = CodeIgniter。
CodeIgniter 从 1.7.3 到 2.0 的主要变化是:
- 不再支持 PHP 4,现在最低要求是 PHP 5.1。
- 表单辅助函数内建 CSRF 保护。
- 适配器
- 应用程序包
- 脚手架在数个版本之前就已废弃,现在它已被删除。
- 删除过时的验证类。
- 插件已被删除,用辅助函数代替。
- 添加了对主 index.php 文件中路由的重写,从而能够基于每个“index”文件重写路由。
- 添加 $route['404_override'],以便可以通过控制器来处理 404 页。
- 至少修复了 50 个 BUG。
Reactor 版包含上面的所有特性,并且它自己也有一些优秀特性:
- 完整的 query-string 支持。
- 如果 base_url 为空,则自动检测。
- 新的缓存适配器,支持文件系统、APC 和 memcache。
- 兼容命令行,以便简化计划任务的开发。
- 20 个以上的调整和改进。
改善和增强的完整列表可以查看变更记录。
工程师团队正在,或即将在未来第一季度里完成这些特性:
用户手册评论功能
用户很快就可以在用户手册中评论每一篇文章,这就和 php.net 中的评论差不多。随着时间的推移,这将使 CodeIgniter 的已经很优秀的文档更加有用。新的评论系统是版本化的,这将允许在发表新评论的同时保留旧的评论。
身份验证适配器
很长时间以来,身份验证库是大家共同的请求(在 UserVoice 上投了大约 800 票)。这是我们想要做的功能,如果能找到正确或接近正确的解决方案的话,但如果要实现一个足够通用并且比较简单的解决方案,就需要每个人花费大量时间做大量的工作。
更像对象的模型
当前正在测试一个功能的向后兼容性,这个功能就是允许 Active Record 返回一个代表当前结果的模型的实例。这将允许以更接近语义的方式处理数据库的内容。
相比过去,现在 CodeIgniter 是一个更加面向社区的框架。你可以通过 BitBucket 或 Phil 的 GitHub 镜像提交 pull 请求。你还会看到更频繁的发布新版本。
你还在等什么?请立即下载并开始使用!
- Reactor 团队
发布人: Hex, 日期: 2011年1月30日
CodeIgniter 发布 1.7.3 版
1.7.3 版是一个安全维护更新,其中包括先前已经打过补丁的文件上传类,另外还有一个新的安全修复,用以防止在某些情况下可能出现的目录遍历(这个修复来自 CodeIgniter 2.0)。剩下就没有什么显着变化了。
推荐运行 CodeIgniter 1.x 的所有站点更新。在你方便时下载并更新你的网站。
发布人: Hex, 日期: 2010年12月7日
CodeIgniter 2.0 - 现在更棒了
几天前我们在内部的 Mercurial 服务器上新建了一个仓库,仓库的取名很简单,就叫做 CodeIgniterNoPhp4。
和 PHP 4 说再见:
数月之前,我们首次将代码移至 Bitbuckt 时 CI 2.0 就摈弃了对 PHP 4 的支持。这样已经有一段时间了。实际上,CI 2.0 已相当稳健以支持我们的商业产品。只有少数情况下,底层代码有很明显的改变时,新版本才会独立发布。我们想让 CI 2 名副其实,所以从今天起,我们的主干代码要求 PHP 5.1.6 以上。
你需要知道的东西:
- 所有核心类名使用“CI_”为前缀。请注意你扩展的核心类。
- 所有核心类现在使用 _construct 作为构造函数。请更新你调用的构造函数!
- CI_Base 已被删除,取而代之的是 CI_Controller。
- compat.php 和兼容性辅助函数已被删除。PHP 5.1.6 支持所有这些函数。
模型对象更干净:
现在不会把超级对象的类成员分配给模型,取而代之的是在 CI_Model 中提供一个 __get() 方法,以便在需要的时候访问它们。这意味着你现在可以直接序列化模型对象。它应该不会影响现有的代码。
链式 Email 和表单验证:
和数据库类库一样,Email 和表单验证类也已经支持链式方法了。所以文档中的 Email 例子可以写成这样:
$this->email->from('your@example.com', 'Your Name')
->to('someone@example.com')
->cc('another@another-example.com')
->bcc('them@their-example.com')
->subject('Email Test')
->message('Testing the email class.')
->send();
更多:
我们正在缓慢而谨慎的改变着,所以预期近几个星期才会在仓库中出现一些变化。这是 CI 激动人心的时期,也是你提交反馈的大好时机。
快快乐乐地编程吧!
发布人: Hex, 日期: 2010年12月7日