# 向 CodeIgniter 貢獻你的力量
* [編寫 CodeIgniter 的文檔](http://codeigniter.org.cn/user_guide/documentation/index.html)
* [Developer's Certificate of Origin 1.1](http://codeigniter.org.cn/user_guide/DCO.html)
CodeIgniter 是一個社區驅動的項目,它會接受從社區里貢獻的文檔和代碼。 這些貢獻都是通過 GitHub 上?[CodeIgniter 代碼倉庫](https://github.com/bcit-ci/CodeIgniter)?的 Issues 或者?[Pull Requests](https://help.github.com/articles/using-pull-requests/)?的形式來完成的。
Issues 是一種快速提交 bug 的方式,如果你發現了一個 CodeIgniter 的 bug 或文檔錯誤,那么請先 看看下面這幾點:
* 是否已經存在一個打開的 Issue
* 該 Issue 是否已經被修復了(檢查下 delevop 分支的代碼,或者已關閉的 Issues)
* 這個 bug 很明顯你一個人就能修復嗎?
提交 Issues 是非常有用的,但是更好的做法是發起一個 Pull Request ,具體的做法是先 fork 主倉庫的代碼,然后將修改的代碼提交到你自己的副本中。這需要你會使用版本控制系統 Git 。
## 支持
請注意,GitHub 并不是用來回答一般的技術支持類問題的!
如果你在使用 CodeIgniter 的某個功能時遇到了問題,請到論壇提問。
如果你不知道自己做的對不對,或者不確定自己找到了一個 bug ,也請先到論壇里提問。
## 提交好問題的技巧
使用描述性的標題(如:解析器類在處理逗號時出錯),而不是使用模糊不清的標題(如:我的代碼出錯了)
在一份報告中只提交一個問題。
在問題中指出 CodeIgniter 的版本(如:3.0-develop),以及出問題的組件(如果你知道的話)(如:解析器類)
解釋清楚你希望出現什么結果,以及當前出現的結果是什么。 如果有錯誤信息的話,并附上錯誤信息和堆棧信息。
如果有助于闡述你的問題的話,你可以包含少量的代碼片段。 如果有大量的代碼或截圖的話,可以使用類似于 pastebin 或者 dropbox 這樣的服務,不要在問題報告中包含這些內容。 為這些內容設置一個合理的過期時間,至少在問題被解決或關閉之前確保它們能訪問。
如果你知道如何修復該問題,你可以 fork 并在你自己的分支中修改,然后提交一個 pull request 。 并將上面說的問題報告作為 pull request 的一部分。
如果能在問題報告中描述問題重現的詳細步驟,那將是極好的。 如果你還能提供一個單元測試用例來重現該錯誤,那將更好,因為這給了修復這個問題的人一個更清晰的目標。
## 指導手冊
這里是如何提交 Pull Requests 的一些指南,如果你提交的 Pull Requests 沒有遵循這篇指南中提出的這些, 你的提交可能會被拒絕并要求你重新提交。這可能聽起來有點難,但是為了保證我們的代碼質量這是必須要做的。
### PHP 代碼規范
所有的代碼都必須符合?[代碼規范指南](http://codeigniter.org.cn/user_guide/general/styleguide.html),它其實就是?[Allman 縮進風格](http://en.wikipedia.org/wiki/Indent_style#Allman_style)?加上下劃線規則以及可讀的操作符。遵循代碼規則可以讓代碼的風格保持一致,同時也意味著代的更可讀性更好。
### 文檔
如果你的修改同時也需要在文檔中另加說明,那么你也需要在文檔中加上它。新的類、方法、參數、默認值的修改 等等這些都需要對文檔做相應的調整。每一處修改也必須要在代碼的變更日志(change-log)中進行更新。另外, PHP 的文檔注釋塊(PHPDoc blocks)也要修改。
### 兼容性
CodeIgniter 推薦使用 PHP 5.4 或更高的版本,但是同時它也對 PHP 5.2.4 保持兼容,所以所有提交的代碼都必須 滿足這一點。如果你用到了 PHP 5.3 (或以上版本)中的函數或新特性,這些代碼需要回退到 PHP 5.2.4 版本的。
### 分支
CodeIgniter 使用了?[Git-Flow](http://nvie.com/posts/a-successful-git-branching-model/)?分支模型, 這要求所有的 pull request 應該提交到 develop 分支,develop 分支是正在開發的打算在下一版發布的分支, master 分支總是包含最新的穩定版并保持干凈,這樣可以在譬如出現緊急安全漏洞時快速的在 master 分支代碼 上打上補丁并發布新的版本,而無需擔心新加的功能會影響它。正是因為這個原因,所有的提交都應該在 develop 分支,發送到 master 分支的提交會被自動關閉。如果你的提交中包含多處修改,請將每一個修改都放到你獨立的分支中。
一次只做一件事:一個 pull request 應該只包含一個修改。這不是意味著說一次提交,而是一次修改(盡管大多數時候 一次提交就是一次修改)。這樣做的原因是如果你在同一個 pull request 中修改了 X 和 Y ,但是我們希望能合并 X 同時不想合并 Y ,這時我們就無法合并你的請求。你可以使用 Git-Flow 分支模型為每一個功能創建一個獨立的分支, 然后提交兩個請求。
### 簽名
你必須對你的工作進行簽名,保證這些工作是你原創的或者不是你原創的但是你有將它們添加到開源項目中的權利。 在 Git 中簽名并沒有得到足夠重視,所以你幾乎用不到?--signoff?參數,但是在你提交代碼到 CodeIgniter 時, 必須使用該參數。
~~~
git commit --signoff
~~~
或簡寫:
~~~
git commit -s
~~~
這個命令會根據你 git 的配置信息在你的提交中添加簽名,例如:
> Signed-off-by: John Q Public .public@example.com](mailto:john.public%40example.com)>
如果你正在使用 Tower 客戶端,在提交窗口中會有一個 "Sign-Off" 復選框,或者你可以將?git?commit?設置成?git?commit?-s?的別名,這樣你就不用關心提交中的簽名了。
通過這種方式對你的工作進行簽名,說明你將遵守 DCO (Developer's Certificate or Origin),[Developer's Certificate of Origin 1.1](http://codeigniter.org.cn/user_guide/DCO.html)?申明的當前版本位于這份文檔的根目錄下。
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量