2009年12月22日 星期二

CakePHP教學 on OSX(六)Todo應用程式練習:(1)烤出應用程式 "Todo" a First Cake!

這篇是根據“Beginning CakePHP: From Novice to Professional”這一本書的第一個“Todo”範例加以修改,不過不過與書中範例不同的是,這裡要用bake腳本自動產生程式碼,並嘗試跟MAMP的伺服器作結合。

看過幾本CakePHP的書,包括官網上面的範例,都是直接把程式檔案放在跟 cake 核心檔案夾同一層的 app 檔案夾裡,然後按照M/C/V的方式把model, controller 跟 view 的相關檔案放在 app 底下特定的檔案夾裡,像是這樣:

但是如此一來,如果要分開作幾個不同的練習,或是分別開發幾個網站的話,不同的應用程式的程式碼,都會分散在 app 檔案夾裡的不同檔案夾裡給全混在一起分不開了。如果從頭到尾只寫一個應用是沒問題,但剛開始學CakePHP時,想分開寫第二個應用練習時就慘了。如果針對每個練習的檔案夾裡都複製一份cake的核心當然可以,但如果所有練習用的應用程式或不同的站台,都能套用同一個版本的CakePHP核心不是更好嗎?

官方往站雖然有說明“三種安裝方式”,示範如何把應用程式寫在 app 檔案夾之外,但看來看去還是語焉不詳。試了半天,發現在Aptnata裡配合之前作好的 bake 腳本,直接烤出一整個應用程式的基本設定檔案,一切馬上變得非常簡單,不用再傷腦筋config要怎麼修改。要讓多個不同目錄的應用程式使用一個相同的CakePHP核心的方法如下︰

新增“todo”專案
  1. 按Aptana視窗的新增圖像,選擇“PHP Project”:
  2. “New”視窗出現,按“Next”按鈕:
  3. 在“Project Name”欄位輸入專案名稱 todo ,點選“Creat project form existing source”,然後按下“Browse...”按鈕:
  4. 將路徑導引到MAMP的網頁根目錄 /Applications/MAMP/htdocs 下(不要放在cake_1_2之內),然後按“新增檔案夾”按鈕:
  5. 輸入新檔案夾名稱為 todo ,然後按下“製作”按鈕:
  6. 系統會打開 todo 檔案夾,請按“打開”按鈕:
  7. 回到“PHP Project”視窗,請按“Finish”結束。

Bake an “todo” App
  1. 接下來要“烤”出 todo 程式的基本設定,點一下Aptana左邊“PHP Explorer”欄的“todo”專案,然後從“Run”選單選之前作好的“External Tools > 1 bake”指令:
  2. 接下來Aptana底下的Console視窗會出現bake腳本的設定提示,接下來的操作都要在這個Console分割視窗裡輸入一些參數:
  3. 如果之前設定bake指令時,有在“Working Directory:”欄位正確輸入 ${project_loc} 參數的話,bake應該就會擷取到目前專案的正確路徑 /Applications/MAMP/htdocs/todo
    Welcome to CakePHP v1.2.4.8284 Console
    ---------------------------------------------------------------
    App : todo
    Path: /Applications/MAMP/htdocs/todo
    ---------------------------------------------------------------
  4. bake是交談式的腳本程式,第一個問題要確定 app 檔案夾。這裡要將 todo 當成 cake 的 app 檔案夾使用,所以請輸入 /Applications/MAMP/htdocs/todo 然後按下Enter
    What is the full path for this app including the app directory name?
    Example: /Applications/MAMP/htdocs/todo/myapp
    [/Applications/MAMP/htdocs/todo/myapp] > /Applications/MAMP/htdocs/todo
  5. 接下來準備要開始“烤”出整個專案,這裡會在確認一次路徑設定,請輸入 y 按下Enter
    Bake Project
    Skel Directory: /Applications/MAMP/htdocs/cake_1_2/cake/console/libs/templates/skel
    Will be copied to: /Applications/MAMP/htdocs/todo
    ---------------------------------------------------------------
    Look okay? (y/n/q)
    [y] > y
  6. 接下來會提示要不要看到輸出的過程,如果要請輸入 y 按下Enter
    Do you want verbose output? (y/n)
    [n] > y
  7. 上一題如果回答,就會看到bake開始從skel檔案夾複製必要的檔案(這裡省略了大部分的過程):
    ---------------------------------------------------------------
    Created: todo in /Applications/MAMP/htdocs/todo
    ---------------------------------------------------------------
    /Applications/MAMP/htdocs/cake_1_2/cake/console/libs/templates/skel/.htaccess copied to /Applications/MAMP/htdocs/todo/.htaccess
    .
    .
    .
    .
    .
    .
    Creating file /Applications/MAMP/htdocs/todo/views/pages/home.ctp
    Wrote /Applications/MAMP/htdocs/todo/views/pages/home.ctp
    Welcome page created
    Random hash key created for 'Security.salt'
    CAKE_CORE_INCLUDE_PATH set to /Applications/MAMP/htdocs/cake_1_2 in webroot/index.php
    CAKE_CORE_INCLUDE_PATH set to /Applications/MAMP/htdocs/cake_1_2 in webroot/test.php
    Remember to check these value after moving to production server
    Your database configuration was not found. Take a moment to create one.
  8. 接下來進入資料庫的設定。雖然我們完全還沒設定好todo的資料庫,不過這裡可以先設定相關的資料,等一下再用phpMyAdmin把資料庫建好。前三個問題分別是問連線名稱資料庫驅動程式類別連線方式資料庫主機位址。這四項都不需要更動,請直接按下 Enter 跳過去:
    ---------------------------------------------------------------
    Database Configuration:
    ---------------------------------------------------------------
    Name:
    [default] >
    Driver: (db2/firebird/mssql/mysql/mysqli/odbc/oracle/postgres/sqlite/sybase)
    [mysql] >
    Persistent Connection? (y/n)
    [n] >
    Database Host:
    [localhost] >
  9. 接下來要設定資料庫連接埠。因為是搭配MAMP的MySQL資料庫,這裡正確的值應該要輸入 '/Applications/MAMP/tmp/mysql/mysql.sock' ,不過bake腳本不能接受一點或二點括號,所以這裡暫時先輸入 /Applications/MAMP/tmp/mysql/mysql.sock 按下 Enter,稍後再來修改:
    Port?
    [n] > /Applications/MAMP/tmp/mysql/mysql.sock
  10. 接下來要輸入資料庫的用戶名稱連線密碼資料庫名稱資料表前置詞資料表文字編碼。這裡的設定請抄起來,等下要到phpMyAdmin設定資料庫。如果要放中文或多國文字資料,請輸入 utf8
    User:
    [root] > todo
    Password:
    > todo2009
    Database Name:
    [cake] > todo
    Table Prefix?
    [n] >
    Table encoding?
    [n] > utf8
  11. 產生設定檔前還會確認依次,請輸入 y 按下Enter
    ---------------------------------------------------------------
    The following database configuration will be created:
    ---------------------------------------------------------------
    Name: default
    Driver: mysql
    Persistent: false
    Host: localhost
    Port: /Applications/MAMP/tmp/mysql/mysql.sock
    User: todo
    Pass: ********
    Database: todo
    Encoding: utf8
    ---------------------------------------------------------------
    Look okay? (y/n)
    [y] > y
  12. 最後會詢問是否要增加新的設置,請按 y 按下Enter結束設置:
    Do you wish to add another database configuration?
    [n] > n
  13. 接下來bake會開始產生資料庫連線的設定檔,但因為之前port設定的括號問題,這裡會發生錯誤並終止bake腳本:
    Creating file /Applications/MAMP/htdocs/todo/config/database.php Wrote /Applications/MAMP/htdocs/todo/config/database.php Parse error: syntax error, unexpected '/' in /Applications/MAMP/htdocs/todo/config/database.php on line 8
  14. 不用擔心,基本的設定bake都作好了。我們先看一下已經產生的檔案,再來修改上面的錯誤。在左邊的“todo”專案圖像上按右鍵,選“Refresh”指令,就可以看到todo檔案夾內出現剛剛bake出來的檔案。
  15. 找到 todo/config/database.php 檔案(圖像上有號表示程式發生錯誤)點二下打開。找到第8行,把參數前後加上括號後存檔就可以了(號消失):
  16. 'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',
  17. 接下來先測試todo應用的基本設定有沒有問題。找到 todo/index.php 上按右鍵,選“Run As > PHP Wed Page”。
  18. 如果MAMP已經開啟,Aptana的內建瀏覽器就會顯示出正確的todo首頁“Sweet, "Todo" got Baked by CakePHP! ”:
  19. 不過因為資料庫並未設定好,所以還是會看到幾個黃色的警告提示。不過我們已經成功地在app檔案夾以外的路徑,建立一個CakePHP的應用。這樣的方式可以任意建立多個專案,而且不會與原來的核心程式碼混淆,方便進一步的開發與遷移。
接下來才要設定資料庫,並利用bake指令建立出CRUD的基本應用。

沒有留言:

張貼留言