CakePHP程式設計師必須知道的21條技巧

2021-09-06 21:40:49 字數 3122 閱讀 3786

這篇文章可以說是cakephp 教程中最經典的了。雖然不是完整的手把手系列, 但作者將自己使用cakephp 的經驗總結了21條,這些尤其是對新手十分有用。 翻譯時故意保留了一些cakephp 中特有的詞語沒有翻譯, 如controller、model等。相信學過cakephp 的人應該馬

這篇文章可以說是cakephp 教程中最經典的了。雖然不是完整的手把手系列, 但作者將自己使用cakephp 的經驗總結了21條,這些尤其是對新手十分有用。

翻譯時故意保留了一些cakephp 中特有的詞語沒有翻譯, 如controller、model等。相信學過cakephp 的人應該馬上就能理解它們的意思吧。

快速建立靜態頁面

我想建立幾個頁面,它們僅包含靜態資料,使用預設layout,不需要任何model。 最初我試圖建立乙個controller並為每個靜態頁面定義乙個action。 但這種方法很笨拙,也不適合快速建立靜態頁面。

實際上只要使用pages controller就可以做到——只要在 views/pages 資料夾下建立乙個 view,就可以通過 /pages 來訪問。例如,我建立了 /views/pages/matt.thtml , 就可以通過 來訪問。

改變靜態頁面的標題

使用pages controller時如果想改變頁面標題,只需在view中加入以下**:

pagetitle = "title of your page."; ?>

在靜態頁面中向layout傳送資料

如果需要向layout傳遞資料(例如表示導航欄中哪個部分應該高亮顯示的變數), 可以在view中新增下面的**:

_viewvars['somedata'] = array('some','data'); ?>

這個陣列就可以在layout中通過$somedata來訪問。

快速建立後台管理

如果你需要建立後台管理程式,並且希望所有管理action都位於某個特定資料夾下, 那麼開啟 config/core.php 並將下面這一行的注釋去掉:

define('cake_admin', 'admin');

這樣所有以」admin_」開頭的action都可以通過 /admin/yourcontroller/youraction 來訪問。例如,如果在posts controller中建立了名為」admin_add」的action, 那麼可以通過 www.example.com/admin/posts/add 訪問這個action。這樣就可以方便地為admin目錄設定密碼以避免他人隨意訪問。

檢視後台執行的sql語句

只需改變config/core.php中的debug常量,即可看到後台執行的sql語句。 0為產品級,1為開發級,2為完整除錯sql,3為完整除錯sql並顯示物件資料。 我通常將debug設定為2,這樣每頁的底部會顯示出乙個包含sql除錯資訊的**。

如果頁面底部新增的**會破壞頁面布局(特別是使用ajax獲取頁面並顯示到頁面中間而不是底部時), 你可以在css中新增以下**以隱藏除錯資訊:

#cakesqllog

這樣既能保持頁面布局,又可以通過檢視源**來看到除錯資訊。 當然最後發布**時別忘了將除錯級別改回0。

獲取豐富的開發文件

別總是盯著手冊。wiki和api也是無價之寶。wiki中的開發指南十分有用,而api文件初看起來比較難, 但你很快就會發現這裡的資訊對你建立cakephp **十分重要。`

使用bake.php

bake是個命令列php指令碼,可以根據資料庫自動生成model、controller和view。在開發的最初階段,我強烈推薦使用 scaffolding讓你的原型程式跑起來。但如果你清楚地知道scaffolding不合適,我推薦你使用bake。 bake會生成所有的檔案並儲存到磁碟上,以便你隨意修改。這樣能節省建立關聯、view、基本的crud crollder操作的重複工作。

(譯者注:crud - create, read, update, delete,資料庫應用的四種基本操作,即」增刪查改」。)

bake很方便。你只需在資料庫中建立乙個表,然後到 /cake/scripts/ 目錄下執行 php bake.php 即可。

如果你通過互動方式來執行bake,它會分幾步提示你建立model、controller和view。 建立結束之後,我通常會閱讀所有生成的**並做必要的修改。

發布程式時注意許可權

複雜model驗證

我需要進行更複雜的驗證,而不僅僅是驗證輸入框非空或者符合某個正規表示式這樣的簡單驗證。 例如,我要驗證使用者註冊時使用的郵件位址是否已被使用。在wiki中我找到了這篇 關於高階驗證的文章, 其中提到了一些十分有用的高階驗證方法。

記錄錯誤日誌

$this->log('something broke');

這樣可以將錯誤記錄到 /tmp/logs/ 中(我最初以為會記錄到apache的錯誤日誌中)。

讓controller使用其他model

如果你的controller需要呼叫來自不同model的資料,只要在controller開頭使用如下**:

var $uses = array('post','user');

這樣controller就能訪問post和user model了。

建立不使用資料庫表的model

我需要建立乙個不使用任何表的model。例如,我想通過$validate陣列方便底驗證輸入資料, 保持model邏輯的正確性。但建立model時對應的表不存在,cakephp 就會報錯。 通過在model中加入以下**可以解決這個問題:

var $usetable = false;

你也可以通過這種方法改變model對應的表名。

var $usetable = 'some_table';

重定向之後記得exit()

對於有經驗的人來說這應當是理所當然的事兒,呼叫 $this->redirect() 之後,剩下的**如果不想執行 要exit()。我也這樣做,但以前曾經認為 $this->redirect() 會為我呼叫exit(實際上不會)。

高階model函式

; tag template for an empty select option tag.

selectempty = "-- please select --"

你可以從/cake/config/tags.ini.php中獲得完整的標籤列表。但我不建議修改該檔案, 否則公升級cakephp 時可能會讓你的修改丟失。

自定義404頁面

程式設計師必須知道的延遲時間

l1快取 0.5ns 轉移 分支 5ns l2快取 7ns 14倍l1快取 加鎖 解鎖 25ns 訪問記憶體 100ns 20倍l2快取,200倍l1快取 1k位元組壓縮 zippy 3ns 前兆網絡卡上傳送1k位元組 10us ssd隨機讀4k資料 150us 從記憶體順序讀1mb資料 250us...

程式設計師必須知道的Oracle索引知識

simon 發表於 2012 11 7 標籤 oracle 資料庫優化 程式設計師 索引 閱讀 878 次 關聯式資料庫的精髓就是通過關係表進行規範化的資料儲存,通過各種表連線技術和各種型別的索引技術來進行資訊的檢索和處理。合理的索引是保證各種操作快速 高效的關鍵。據統計,與資料庫有關的效能問題,7...

優秀程式設計師必須知道的32個演算法

1 a 搜尋演算法 圖形搜尋演算法,從給定起點到給定終點計算出路徑。其中使用了一種啟發式的估算,為每個節點估算通過該節點的最佳路徑,並以之為各個地點排定次序。演算法以得到的次序訪問這些節點。因此,a 搜尋演算法是最佳優先搜尋的範例。2 集束搜尋 又名定向搜尋,beam search 最佳優先搜尋演算...