Time of Update: 2017-02-16
網路應用程式的效能受很多因素的影響。資料庫存取,檔案系統操作,網路頻寬等都是潛在的影響因素。 Yii 已在各個方面減少架構帶來的效能影響。但是在使用者的應用中仍有很多地方可以被改善來提高效能。1. 開啟 APC 擴充啟用 PHP APC 擴充 可能是改善一個應用整體效能的最簡單方式。此擴充緩衝和最佳化 PHP 中間代碼並避免時間花費再為每個新來的請求解析PHP指令碼。2. 禁用偵錯模式禁用偵錯模式是另一個改善效能的容易方式。若常量 YII_DEBUG 被定以為 true,這個 Yii
Time of Update: 2017-02-16
控制台應用主要用於實現線上Web應用所需要的離線操作,例如代碼產生, 搜尋索引編譯, 郵件發送等等. Yii架構以物件導向的方式提供了一個編寫控制台應用的架構. 它允許控制台應用訪問線上Web應用所使用的資源 (例如資料庫連接資訊) .1. 概覽Yii可以以命令列的方式運行每一個控制台任務,控制台命令是一個繼承自CConsoleCommand的類。當我們使用 yiic webapp 工具建立一個初始化的Yii應用骨架的時候, 我們可以在protected檔案夾下看到如下兩個檔案:yiic:
Time of Update: 2017-02-16
國際化 (譯者註:即 Internationalization,因為這個單詞 I 和 n 之間有18個字母,因此常縮寫為I18N) 是指設計一種應用軟體的過程,這種軟體無需做大的工程改變就能適應不同的語言和地區的需要。 對 Web 應用程式來說,國際化尤為重要,因為潛在的使用者可能來自世界的各個角落。Yii 在若干方面提供了對 I18N 的支援它為每種可能的語言和變數提供了本地化資料。它提了供資訊和檔案的翻譯服務。它提供了基於本地化的日期和時間格式。它提供了基於本地話的數字格式。在下面的小節中,
Time of Update: 2017-02-16
Web service 是一個軟體系統,設計來支援電腦之間跨網路相互訪問。在Web應用程式,它通常用一套API,可以被互連網訪問和執行在遠端系統主機上的被請求服務。系統主機所要求的服務。例如,以Flex為基礎的用戶端可能會援引函數實現在伺服器端運行PHP的Web應用程式。 Web service依賴SOAP作為通訊協定棧的基礎層。Yii提供CWebService和CWebServiceAction簡化了在Web應用程式實現Web service。這些API以類形式實現,被稱為service
Time of Update: 2017-02-16
Yii提供了一個完整的,基於PHP5異常處理的錯誤處理機制。當一個應用開始運行,進行使用者請求的處理的時候,會註冊handleError方法來處理PHP warnings和notices資訊;同時也註冊加handleException方法來處理未被捕獲的PHP異常。因此,如果在應用運行期間出現一個PHP warning/notice 或者一個未捕獲的PHP異常,錯誤處理器就會接過控制權來運行必要的處理機制。提示:
Time of Update: 2017-02-16
Yii 提供了一個靈活可擴充的日誌功能。記錄的日誌 可以通過記錄層級和資訊分類進行歸類。通過使用 層級和分類過濾器,所選的資訊還可以進一步路由到 不同的目的地,例如一個檔案,Email,瀏覽器視窗等。1. 資訊記錄資訊可以通過 Yii::log 或 Yii::trace 記錄。其區別是後者只在當應用程式運行在偵錯模式(debug mode) 中時才會記錄資訊。Yii::log($message, $level, $category);Yii::trace($message, $category)
Time of Update: 2017-02-16
Theming是一個在Web應用程式裡定製網頁外觀的系統方式。通過採用一個新的主題,網頁應用程式的整體外觀可以立即和戲劇性的改變。在Yii,每個主題由一個目錄代表,包含view檔案,layout檔案和相關的資源檔,片, CSS檔案, JavaScript檔案等。主題的名字就是他的目錄名字。全部主題都放在在同一目錄WebRoot/themes下
Time of Update: 2017-02-16
對於需要限制某些使用者訪問的網頁,我們需要使用驗證(Authentication)和授權(Authorization)。 驗證是指核查一個人是否真的是他自己所聲稱的那個人。這通常需要一個使用者名稱和密碼, 但也包括任何其他可以表明身份的方式,例如一個智慧卡,指紋等等。 授權則是找出已通過驗證的使用者是否允許操作特定的資源。 這一般是通過查詢此使用者是否屬於一個有權訪問該資源的角色來判斷的。Yii 有一個內建的驗證/授權(auth)架構,用起來很方便,還能對其進行自訂,使其符合特殊的需求。Yii
Time of Update: 2017-02-16
自版本 1.1.2 起, Yii 裝備了基於 Web 介面的代碼產生工具Gii。 它取代了之前的命令列端的代碼產生工具 yiic shell。 在這部分,我們將講解如何使用 Gii 以及如何擴充 Gii 以增加我們的開發成果。1. 使用 GiiGii 是以模組的方式實現的,它必須在一個已存在的 Yii 應用程式中使用。要使用 Gii,我們首先更改應用程式的配置如下:return array( ...... 'modules'=>array(
Time of Update: 2017-02-15
在PHP的無限級分類中,用到的很多方法都是遞迴,但是我們對遞迴的理解還很模糊,我們接下來就深入理解下遞迴的優缺點,讓大家能有個全面的認識。什麼是遞迴?定義遞迴(英語:Recursion),又譯為遞迴,在數學與電腦科學中,是指在函數的定義中使用函數自身的方法。英文的Recursion從詞源上分析只是"re- (again)" + "curs- (come, happen)" 也就是重複發生,再次重現的意思。 而對應的中文翻譯 ”遞迴“ 卻表達了兩個意思:”
Time of Update: 2017-02-15
因為Yii測試架構基於PHPUnit構建,所以推薦你在理解如何寫一個單元測試之前先通讀一遍PHPUnit文檔。下面我們簡要概括一下在Yii中寫一個單元測試的基本原則:一個單元測試以繼承自CTestCase或者CDbTestCase的XyzTest類的形式編寫, 其中Xyz代表要被測試的類. 例如, 想要測試Post類,我們會相應地將測試類別命名為PostTest. 基類CTestCase是通用單元測試類, 而CDbTestCase只適用於測試AR模型類. 由於PHPUnit_Framework_
Time of Update: 2017-02-15
自動化的測試需要被執行很多次.為了確保測試過程是可以重複的, 我們很想要在一些可知的狀態下進行測試, 這個狀態我們稱之為 特定狀態. 舉個例子,在一個部落格應用中測試文章建立特性, 每次當我們進行測試時, 與文章相關的表(例如. Post 表 , Comment 表)應該被恢複到一個特定的狀態下. PHPUnit 文檔 已經很好的描述了一般的特定狀態的構建. 而本節主要介紹怎樣像剛才描述的例子那樣構建資料庫特定狀態.設定構建資料庫的特定狀態,這恐怕是測試以資料庫為後端支援的應用最耗時的部分之一.
Time of Update: 2017-02-15
測試是軟體開發中必不可少的環節.無論我們是否意識到,在開發Web應用的時候,我們始終都是在測試的.例如, 當我們用PHP寫了一個類時, 我們可能會用到一些注入 echo 或者 die 語句來顯示我們是否正確地實現了某個方法;當我們實現了包含一套複雜的HTML表單的web頁面時, 我們可能會試著輸入一些測試資料來確認頁面是否是按照我們的預期來互動的.更進階的開發人員則會寫一些代碼來自動完成這個測試過程, 這樣一來每當我們需要測試一些東西的時候, 我們只需要調用代碼, 剩下來的就交給電腦了.
Time of Update: 2017-02-15
由於擴充意味著是第三方開發人員使用,需要一些額外的努力去建立它。以下是一些一般性的指導原則:*擴充最好是自己自足。也就是說,其外部的依賴應是最少的。如果使用者的擴充需要安裝額外的軟體包,類或資源檔案,這將是一個頭疼的問題。 *檔案屬於同一個擴充的,應組織在同一目錄下,目錄名用副檔名稱。 *擴充裡面的類應使用一些單詞字母首碼,以避免與其他擴充命名衝突。 *擴充應該提供詳細的安裝和API文檔。這將減少其他開發員使用擴充時花費的時間和精力。
Time of Update: 2017-02-15
資料緩衝即儲存一些 PHP 變數到緩衝中,以後再從緩衝中取出來。出於此目的,緩衝組件的基類 CCache 提供了兩個最常用的方法: set() 和 get()。要在緩衝中儲存一個變數 $value ,我們選擇一個唯一 ID 並調用 set() 儲存它:Yii::app()->cache->set($id, $value);緩衝的資料將一直留在緩衝中,除非它由於某些緩衝策略(例如緩衝空間已滿,舊的資料被刪除)而被清除。 要改變這種行為,我們可以在調用 set()
Time of Update: 2017-02-15
注意: yii從版本1.1.6以後才開始支援資料庫遷移特性。和源碼一樣,資料庫的結構也隨著我們開發和維護資料庫驅動應用而不斷壯大.例如,在開發期間,我們可能想要添加一個新的表; 或者在應用投入生產期以後,我們可能會意識到需要在某個列上添加索引.
Time of Update: 2017-02-15
我們已經瞭解了怎樣使用 Active Record (AR) 從單個資料表中擷取資料。 在本節中,我們講解怎樣使用 AR 串連多個相關資料表並取回關聯(join)後的資料集。為了使用關係型 AR,我們建議在需要關聯的表中定義主鍵-外鍵約束。這些約束可以協助保證相關資料的一致性和完整性。為簡單起見,我們使用如下所示的實體-關係(ER)圖中的資料結構示範此節中的例子。資訊: 對外鍵約束的支援在不同的 DBMS 中是不一樣的。 SQLite < 3.6.19
Time of Update: 2017-02-13
Data Access Objects(DAO) 對訪問儲存在不同資料庫管理系統(DBMS)中的資料提供了一個通用的API。 因此,在將底層 DBMS 更換為另一個時,無需修改使用了 DAO 訪問資料的代碼。 Yii DAO 基於 PHP Data Objects (PDO) 構建。它是一個為眾多流行的DBMS提供統一資料訪問的擴充,這些 DBMS 包括 MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 擴充和特定的 PDO 資料庫驅動(例如 PDO_MYSQL)
Time of Update: 2017-02-13
當建立 HTML 表單時,經常我們發現我們在寫很多重複而且在不同項目中很難重用的視圖代碼。 例如,對於每個輸入框, 我們需要以一個文字標籤和顯示可能的驗證錯誤來關聯它。 為了改善這些代碼的重用性,我們可以使用自版本 1.1.0 可用的表單產生器特徵。1. 基本概念Yii 表單產生器使用 CForm 對象來代表描述一個HTML表單所需的內容,包括哪些資料模型關聯到此表單, 表單中有哪些輸入框,以及如何渲染整個表單。開發人員主要需要建立和配置這個 CForm
Time of Update: 2017-02-13
有時我們想通過批量模式收集使用者輸入。也就是說, 使用者可以為多個模型執行個體輸入資訊並將它們一次性提交。 我們將此稱為 表格輸入(tabular input) ,因為這些輸入項通常以 HTML 表格的形式呈現。要使用表格輸入,我們首先需要建立或填充一個模型執行個體數組,取決於我們是想插入還是更新資料。 然後我們從 $_POST 變數中提取使用者輸入的資料並將其賦值到每個模型。和單模型輸入稍有不同的一點就是: 我們要使用 $_POST['ModelClass'][$i]