看過幾本CakePHP的書,包括官網上面的範例,都是直接把程式檔案放在跟 cake 核心檔案夾同一層的 app 檔案夾裡,然後按照M/C/V的方式把model, controller 跟 view 的相關檔案放在 app 底下特定的檔案夾裡,像是這樣:
但是如此一來,如果要分開作幾個不同的練習,或是分別開發幾個網站的話,不同的應用程式的程式碼,都會分散在 app 檔案夾裡的不同檔案夾裡給全混在一起分不開了。如果從頭到尾只寫一個應用是沒問題,但剛開始學CakePHP時,想分開寫第二個應用練習時就慘了。如果針對每個練習的檔案夾裡都複製一份cake的核心當然可以,但如果所有練習用的應用程式或不同的站台,都能套用同一個版本的CakePHP核心不是更好嗎?
官方往站雖然有說明“三種安裝方式”,示範如何把應用程式寫在 app 檔案夾之外,但看來看去還是語焉不詳。試了半天,發現在Aptnata裡配合之前作好的 bake 腳本,直接烤出一整個應用程式的基本設定檔案,一切馬上變得非常簡單,不用再傷腦筋config要怎麼修改。要讓多個不同目錄的應用程式使用一個相同的CakePHP核心的方法如下︰
新增“todo”專案
- 按Aptana視窗的新增圖像,選擇“PHP Project”:
- “New”視窗出現,按“Next”按鈕:
- 在“Project Name”欄位輸入專案名稱 todo ,點選“Creat project form existing source”,然後按下“Browse...”按鈕:
- 將路徑導引到MAMP的網頁根目錄 /Applications/MAMP/htdocs 下(不要放在cake_1_2之內),然後按“新增檔案夾”按鈕:
- 輸入新檔案夾名稱為 todo ,然後按下“製作”按鈕:
- 系統會打開 todo 檔案夾,請按“打開”按鈕:
- 回到“PHP Project”視窗,請按“Finish”結束。
Bake an “todo” App
- 接下來要“烤”出 todo 程式的基本設定,點一下Aptana左邊“PHP Explorer”欄的“todo”專案,然後從“Run”選單選之前作好的“External Tools > 1 bake”指令:
- 接下來Aptana底下的Console視窗會出現bake腳本的設定提示,接下來的操作都要在這個Console分割視窗裡輸入一些參數:
- 如果之前設定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
---------------------------------------------------------------
- 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 - 接下來準備要開始“烤”出整個專案,這裡會在確認一次路徑設定,請輸入 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
- 接下來會提示要不要看到輸出的過程,如果要請輸入 y 後按下Enter:
Do you want verbose output? (y/n)
[n] > y - 上一題如果回答,就會看到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. - 接下來進入資料庫的設定。雖然我們完全還沒設定好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] > - 接下來要設定資料庫連接埠。因為是搭配MAMP的MySQL資料庫,這裡正確的值應該要輸入 '/Applications/MAMP/tmp/mysql/mysql.sock' ,不過bake腳本不能接受一點或二點括號,所以這裡暫時先輸入 /Applications/MAMP/tmp/mysql/mysql.sock 後按下 Enter,稍後再來修改:
Port?
[n] > /Applications/MAMP/tmp/mysql/mysql.sock - 接下來要輸入資料庫的用戶名稱、連線密碼、資料庫名稱、資料表前置詞跟資料表文字編碼。這裡的設定請抄起來,等下要到phpMyAdmin設定資料庫。如果要放中文或多國文字資料,請輸入 utf8 :
User:
[root] > todo
Password:
> todo2009
Database Name:
[cake] > todo
Table Prefix?
[n] >
Table encoding?
[n] > utf8 - 產生設定檔前還會確認依次,請輸入 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 - 最後會詢問是否要增加新的設置,請按 y 後按下Enter結束設置:
Do you wish to add another database configuration?
[n] > n - 接下來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
- 不用擔心,基本的設定bake都作好了。我們先看一下已經產生的檔案,再來修改上面的錯誤。在左邊的“todo”專案圖像上按右鍵,選“Refresh”指令,就可以看到todo檔案夾內出現剛剛bake出來的檔案。
- 找到 todo/config/database.php 檔案(圖像上有x號表示程式發生錯誤)點二下打開。找到第8行,把參數前後加上括號後存檔就可以了(x號消失):
- 接下來先測試todo應用的基本設定有沒有問題。找到 todo/index.php 上按右鍵,選“Run As > PHP Wed Page”。
- 如果MAMP已經開啟,Aptana的內建瀏覽器就會顯示出正確的todo首頁“Sweet, "Todo" got Baked by CakePHP! ”:
- 不過因為資料庫並未設定好,所以還是會看到幾個黃色的警告提示。不過我們已經成功地在app檔案夾以外的路徑,建立一個CakePHP的應用。這樣的方式可以任意建立多個專案,而且不會與原來的核心程式碼混淆,方便進一步的開發與遷移。
'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',
接下來才要設定資料庫,並利用bake指令建立出CRUD的基本應用。
沒有留言:
張貼留言