CodeIgniter 英文官方网站

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 根目录下创建一个新目录,进入这个目录,然后运行:

git clone -b feature/sparks --depth 1 git://github.com/EllisLab/CodeIgniter.git 

这样做将克隆一个 CodeIgniter Reactor 代码库的副本,并切换到 sparks 分支上。如果你通过浏览器浏览刚才自动创建的 CodeIgniter 目录,你应该看到 CodeIgniter 的欢迎页面。

接下来,让我们找到我们的第一个 Spark(译注:一个 Spark 可以理解为一个第三方类库,后面的 spark 都是这个意思)。在我们刚才创建的 CodeIgniter 目录中打开命令行,运行类似这样的命令:

php index.php --spark <command[arguments] 

例如,显示一个所有命令的列表可以这样:

php index.php --spark help 

如果你觉得很繁琐,那么可以用 -s 替换 --spark。

为了创建这个演示站点,我们需要访问 Github 的 API。我们知道,GitHub 的 API 是​​一个 RESTful API,所以,可以先用 search 命令搜索一些对我们有用的东西:

php index.php --spark search rest 

你会看到一个包的列表。restclient 这个包看起来符合要求。安装这个包也很容易:

php index.php --spark install restclient 

屏幕上会显示一大堆内容。重要的内容在尾部。我们会看到 Sparks 为我们安装了 restclient 需要的 curl 库。也告诉我们刚刚安装了哪个版本。Sparks 支持 spark 的多版本共存,所以我们可以同时安装一个 spark 的多个版本。

让我们尝试一下。编辑 application/controllers/welcome.php 文件,在 index 方法的最上面加载这个 spark:

$this->load->spark('restclient/2.0.0'); 

加载这个 spark 后,我们将会给 GitHub 发一个测试请求。

$user 'github';

$this->rest->initialize(array('server' => 'https://api.github.com/'));
$repos $this->rest->get('users/'.$user.'/repos');

var_dump($repos); 

注意:可能返回 false。这可能会发生在一些本地环境中,特别是 MAMP,可能的原因是 SSL 证书问题。如果你碰到这个问题,你可以在上面代码中的 get 调用前添加以下内容:

$this->rest->option(CURLOPT_SSL_VERIFYPEERFALSE); 

现在我们可以得到返回数据了,但输出内容还比较凌乱。所以,我们将用视图替代 var_dump。重新命名现有视图为一个更合适的名字(比如“home”)。然后加载这个视图,并传递返回的数据给视图:

$this->load->view('home', array('repos' => $repos)); 

在这个视图中,通过循环 $repos 变量,我们可以让输出更美观。然后,我观察了一下前面的 dump 结果,我决定在输出中包括标题、描述和一个链到 GitHub 的链接。

<?php foreach ($repos as $repo):?>
<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;?> 

我们现在已经取得了一些成果。但是还不能满足,一个产品没有好的文档怎么能行?当然文档肯定会写的。我们先给文档添加个链接吧。在视图的循环中添加:

<?php echo anchor('/welcome/docs/'.$repo->name'Documentation')?> 

我们在这里使用了 URL 辅助函数,所以请先在控制器中载入它:

$this->load->helper('url'); 

为实现这个功能,我们要在刚才的控制器(application/controllers/welcome.php)中创建一个方法:

public function docs($which{} 

GitHub 上有一个很好的约定,任何项目的根目录中的 README 文件将显示为文档。它们很多都是以 markdown 格式写成的,所以这个例子中我们尝试编写一个“README.md”文件。我们需要的功能都可以通过 GitHub 的 API 实现。

$trees $this->rest->get('repos/'.$this->user.'/'.$which.'/git/trees/HEAD'); 

调用 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,我们可以随时读取文件内容。注意,文件内容已被编码,所以我们需要一个额外的步骤:

$readme $this->rest->get($doc_url);
$content base64_decode($readme->content); 

我们就快成功了!我们可以传递文件内容到视图中,看起来还不错:

$this->load->view('docs', array('content' => $content));
// view:
<?php echo $content?> 

然而,我们不应该让我们的用户看到原始的 markdown 内容。让我们回到命令行,看看我们可以找到些什么:

php index.php --spark search markdown 

markdown Spark 看起来很棒!让我们继续安装它。

php index.php --spark install markdown 

有了这个新工具,我们可以渲染 markdown 内容:

$this->load->spark('markdown/1.2.0');
// in the view
<?php echo parse_markdown($content)?> 

现在你已经成功了!

当然,在这个网站上线后,我们不希望每个请求都访问 API,否则我们很快将遇到麻烦。因此,作为最后一步,你应该缓存这些页面:

$this->output->cache(60*24); // cache for a day 

我们编写完成的控制器应该类似于: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 激动人心的时期,也是你提交反馈的大好时机。

快快乐乐地编程吧!

立即加入关于 CI 2.0 的大讨论!

发布人: Hex, 日期: 2010年12月7日

第 3 页/共 7 页 « 第一页  < 1 2 3 4 5 >  最后一页 »