Google 提供 Git 的安裝程式(http://code.google.com/p/git-osx-installer/),安裝的位置是在 /usr/local/bin/git 檔案夾之下,因此可能無法直接從終端機取用。
要將 Git 安裝在 Lion 系統的 /usr/bin ,可以透過 AppStore 下載免費的 Xcode ,然後從 Preference > Download 面板下選 Components 標籤,安裝“Command Line Tools”,就會下載 Git 並安裝於 /usr/bin 。
2012年5月21日 星期一
Ampps 一次在OSX上安裝230種OpenSource 開源碼軟體
2012年3月31日 星期六
2010年11月14日 星期日
MBA升級10.6.5,FireFox的GoogleToolbar失靈!?
MBA 2009 升級到OSX 10.6.6 唯一的災情!FireFox的Google Toolbar的按鈕全部消失!?重裝也無效!(之前也發生過,原因不明!?)
解決方法:
解決方法:
- 移除 FilreFox的附加元件:Google Toolbar for FlreFox
- 移除 /使用者/你的名稱/資源庫/Application Support/Firefox/Profiles/ 路徑下的:"GoogleToolbarData" 檔案夾
- 重新安裝 Google Toolbar for FlreFox 附加元件。
2010年10月23日 星期六
BootCamp 3+Win 7+VMware Fusion 3=無網路設備問題解決
在MacBook Air上安裝Win 7+BootCamp 3.1+VMware Fusion 3.1,確發現Win 7無法上網,檢查Win 7的裝置管理員,會發現裡面的Ethernet出現驚歎號,重新安裝VMware Fusion Tools,裝置管理員還是找不到驅動程式。
解決方式透過Google找到這篇:
http://www.askdavetaylor.com/how_to_enable_ethernet_wifi_access_vmware_mac_windows_7.html
確發現無法找到這個檔案:
/Users/你的使用者ID/Documents/Virtual Machines/虛擬機名稱.vmx
原來VMware Fusion 3的設置檔案改了位置,放在:
/Users/你的使用者ID/Library/Application Support/VMware Fusion/Virtual Machines/虛擬機名稱/%2Fdev%2Fdisk0/
("%2Fdev%2Fdisk0"應該是磁碟路徑。)
底下有個“Boot Camp partition”的套件,按右鍵選擇“顯示套件內容”,就可以在新的視窗裡找到 Boot Camp partition.vmx 這個設定檔。用TextWrangler或其他文字處理器開啟,找到以下字串:
ethernet0.present = "TRUE"
ethernet0.connectionType = "nat"
ethernet0.wakeOnPcktRcv = "FALSE"
ethernet0.linkStatePropagation.enable = "TRUE"
在這些字串之後新增一行,加入以下字串:
ethernet0.virtualDEV = "e1000"
存檔後,重新開啟VMware Fusion下的BootCamp分區,就可以正常使用OSX的網路連線上網了。
解決方式透過Google找到這篇:
http://www.askdavetaylor.com/how_to_enable_ethernet_wifi_access_vmware_mac_windows_7.html
確發現無法找到這個檔案:
/Users/你的使用者ID/Documents/Virtual Machines/虛擬機名稱.vmx
原來VMware Fusion 3的設置檔案改了位置,放在:
/Users/你的使用者ID/Library/Application Support/VMware Fusion/Virtual Machines/虛擬機名稱/%2Fdev%2Fdisk0/
("%2Fdev%2Fdisk0"應該是磁碟路徑。)
底下有個“Boot Camp partition”的套件,按右鍵選擇“顯示套件內容”,就可以在新的視窗裡找到 Boot Camp partition.vmx 這個設定檔。用TextWrangler或其他文字處理器開啟,找到以下字串:
ethernet0.present = "TRUE"
ethernet0.connectionType = "nat"
ethernet0.wakeOnPcktRcv = "FALSE"
ethernet0.linkStatePropagation.enable = "TRUE"
在這些字串之後新增一行,加入以下字串:
ethernet0.virtualDEV = "e1000"
存檔後,重新開啟VMware Fusion下的BootCamp分區,就可以正常使用OSX的網路連線上網了。
2009年12月23日 星期三
CakePHP教學 on OSX(六)Todo應用程式練習:(3)應用程式測試 Taste “todo” cake!
CakePHP的bake all腳本可以根據資料表的架構(schema),一次產生CRUD所需的程式碼。如果你按照幾篇的動作已經用bake all將items資料表的程式產生,就可以在瀏覽器輸入 http://localhost/todo/items 這個網址來測試。如果要在Aptana裡測試,請按照這一篇的方法,用“Run As > PHP Web Page”執行todo專案下的index.php叫出Aptana的內建瀏覽器,然後在輸入 http://localhost/todo/items 這個網址來測試。
CakePHP遵循MVC的軟體架構,語言的編寫方式是採用物件導向(Object-Oriented Programming)。所謂的“物件導向”是用“物件”來類比一個“獨立的程式”。一個“物件”有自己的“屬性(properties)”跟“行為(behaviors)”,例如一隻“小狗”會有自己的“品種”、“年齡”、“毛色”等屬性,以及“吃、喝、拉、撒”等行為。“物件”在實際的程式撰寫時,通常就是一個“獨立的程式檔案”,其內容稱為一個“類別”。一個“類別”的物件屬性,就是以類別的“變數(variables)來儲存;而“類別”的物件行為,就是以“函數(functions)”來實現。把適當的資料傳入一個“類別”的“函數”,就會引發一些行為,例如改變自己或其他類別的“屬性”,或引發自己或他類別的近一步的“行為”。物件導向的編寫方式有好處也有壞處,但基本上已經是目前廣被採用的程式設計典範,因此PHP語言在第4版之後就開始支援物件導向的語法。
其次所謂的MVC架構,簡單的說,就是把一個完整的應用程式的複雜任務,分為(資料儲存與驗證的)模型(model),(資料存取與運算的)控制器(controller)以及(資料輸出入與運算結果顯示的)視圖(view)三個部份。用“物件導向”來實現MVC架構,就是把一個應用程式拆成三個model, controller 以及 view 三個類別,也就是(至少)三個獨立分離的程式檔案。每個類別裡都有自己的變數與函數,功能獨立並可以互相傳遞資料。
跟“物件導向”一樣,MVC架構對於小型的應用程式來說是殺雞用牛刀,比較適合大型與複雜的功能。就我個人的看法,“物件導向”配合MVC的好處,可以將整個複雜的程式,分離成比較簡單與獨立的任務。當任務一多會有點繁雜,並產生除錯上的困難。但因為每個任務都簡化了,所以相對來說,可以容易完成程式的撰寫。
“Todo” 測試
- 基本上Cake的設計,是以 http:/網站根目錄/控制器名稱/函數名稱/函數引數 的方式,來導入或呼叫相關的程式。前面的練習我把應用程式寫在MAMP的網頁根目錄下的todo檔案夾,所以應用程式根目錄應該是 localhose/todo ;
- 由於我們的todo程式是用bake all腳本用從資料庫內的items資料表產生,所以控制器名稱就是 items 。依照CakePHP的命名規則,model名稱是名詞單數,例如如item,item的控制器以及資料表通常就是model名稱的複數,例如items。(所以建立資料表的時候,名稱記得要加“s”。)因此只要在瀏覽器輸入 http://localhost/todo/items 這個網址,就可以看到用來控制items資料表的items控制器程式的首頁。(由於目前CakePHP的除錯(Debug)模式是開啟的狀態,所以底下會看到SQL程式存取資料庫的輸出結果。):

- CakePHP的bake all腳本,會一次製作出items控制器的好幾個函數,例如:add, view, edit 與 delete 等等。因此如果要新增一筆資料,只要輸入網址: http://localhost/todo/items/add ,或網頁按下方的“New Item”連結,就會進入新增資料的頁面。請試試看新增幾筆資料看看。

- 如果已經有了幾筆資料後,要編輯 id=1 的這筆資料,只要輸入網址: http://localhost/todo/items/edit/1

- 如果要查看 id=1 的這筆資料的完整內容,只要輸入網址: http://localhost/todo/items/view/1

- 如果要刪除 id=1 的這筆資料,只要輸入 http://localhost/todo/items/delete/1 ,然後todo程式會提示確認是否要刪除?

- 這樣一來CRUD的“Create(add)”、“Update(edit)”、“Delete”都有了,那“Retrieve(find?)”呢?CakePHP的bake all產生出來的程式,是把items控制器的首頁,作成“find all”顯示所有的資料,並以“List”方式輸出,甚至還有分頁的功能!所以其他add, edit, view, delete頁面的“List Items”,都會導回到 http://localhost/todo/items 這個網址。所以“Retrieve”功能也算是有了。
2009年12月22日 星期二
CakePHP教學 on OSX(六)Todo應用程式練習:(2)自動產生程式碼 Bake All 一次烤熟!
雖然翻了幾本CakePHP跟RoR的書,但都還沒有全部看完。不過就我目前的了解,兩者建立資料庫的方式有點不同。RoR可以透過建立migrate檔案,記錄歷次資料庫架構(schema)設計上的改變,作為版本遷移的依據。RoR並且可以透過migrate檔案,產生不同的資料庫系統建立資料表所需的SQL程式碼,並自動產生資料庫檔案。這樣一來讓RoR的開發與資料庫的設計,不會遷就特定的資料庫系統而必須大幅修改程式碼。就這點來說,RoR可說是非常先進的設計。
CakePHP卻是要先用phpMyAdmin或其他的工具,在資料庫系統中先構建出完整的資料庫檔案,然後才能透過schema腳本從既有的資料庫備份出SQL檔案,作為資料庫架構的記錄與遷移的依據。或是先用SQL語言寫好資料庫的架構,再透過schema腳本將資料庫製作出來。方法上也許沒有RoR先進,但是我想一般的PHP開發者,應該都很熟悉這樣的開發方式。而且只要資料庫架構設計的夠好夠正確,透過bake腳本自動產生程式碼,甚至比RoR一步步地架構 scafford 還要迅速哦!這篇還是根據“Beginning CakePHP: From Novice to Professional”這一本書的第一個“Todo”範例加以修改。
用phpMyAdmin建立 todo 資料庫、帳號與密碼
- 打開MAMP視窗(基本上開發PHP過程中,MAMP應該都要一直開著),按一下“Open Start Page”按鈕:

- 按一下上方的“phpMyAdmin”標籤:

- 基本上MAMP是開發用的通常都不會拿來當正式的伺服器,所以root使用者我也沒有去更動密碼(有嘗試變更過但會出錯),所以MySQL的root安全性問題,這裡先跳過。phpMyAdmin的預設介面語言是英文,如果不習慣,可以在下方的“Interface”下的“Language”選單,選擇“中文 Chinese traditional”:

- 接下來要製作todo帳號跟資料庫。如果不是在phpMyAdmin的首頁,先點一下左上角的“小房子”圖像跳到首頁,後點一下上方的“權限”標簽,再點下方的“新增使用者”的超連結:

- 進入“新增使用者”的頁面,在“登入資訊”區內,“使用者名稱”欄位輸入:todo,主機選“本地(localhost)”,“密碼”跟“確認密碼”輸入相同的密碼值(之前bake腳本時設定的是:todo2009),不要按產生密碼按鈕。下方的“Database for user”區,請勾選第二項“Create database with same name and grant all privileges”,這樣就會自動產生一個同名的todo資料庫,並給同名的使用者與完全的存取權限。為了安全起見,“整體權限”內容請勿勾選。確認設定一切無誤後,請按右下方的“執行”按鈕:

- 指令執行成功的話,todo帳號跟同名的資料庫就產生了。點一下左側邊欄的“todo”連結,進入todo資料庫:

- 進入進入todo資料庫後,按一下上方的“SQL”標籤,在下方的欄位中貼上以下的SQL程式碼,然後按下執行:
CREATE TABLE `items` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 NOT NULL, `completed` tinyint(1) NOT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
- 如果SQL程式沒有問題,就會看到items資料表出現在左側邊欄的todo資料庫下方:

- 這裡的資料表設計跟“書上”的範例有點不同。“書上”的範例是用一個“date”欄位來儲存時間,但是編寫model的驗證程式時跳過去。但是如果用書上的SQL產生的資料庫導入bake自動地產生程式,測試時發現一直無論“date”欄位如何選擇,都會出現一個“field empty”的驗證錯誤。所以這裡改用兩個CakePHP預設的“魔術欄位”:“created”跟“modified”兩個欄位,並設定成“datetime”格式,預設值是“NULL”。這樣一來CakePHP會自動地用“created”儲存資料產生的時間,並用“modified”儲存最後修改的時間,完全不用寫任何一行程式碼!!
增加bake all指令
CakePHP的bake腳本有一個超好用的參數“all”,一次就可以根據資料庫內所有的資料表,建立所有相關的model/controller/view的基本CRUD程式,甚至能自動建立資料表之間的關連性。所以這裡要把之前的bake外部指令修改一下,加入all參數:
- 從Aptana的“Run”選單下選擇“External Tools Configurations...”:

- 在左側邊欄上的bake指令上按右鍵,選擇“Duplicate”複製一個副本:

- 將新的外部指令改名為bake all,將在下方的“arguments”欄位參數改為 bake all ,然後按一下右下方的“Apply”按鈕儲存後,按“Close”按鈕關閉(暫時不要立即執行):

- 雖然bake all已經做好,但“Run”選單下卻看不到。要在“Run”選單下顯示bake all指令,請選擇“Organize Favorites...”:

- 出現“Organize Exertnal Tool Favorites”視窗,請按“Add”按鈕:

- 出現“Add Exertnal Tool Favorites”視窗,勾選要增加的兩個指令,或按“Select All”之後,按“OK”關閉視窗:

- 回到“Organize Exertnal Tool Favorites”視窗,請按“OK”按鈕關閉。以後就可以在Run選單裡看到bake跟bake all兩個外部指令:

用bake all自動建立基本的CRUD應用程式
- 外部指令bake all作好後,就可以套用在專案上。請先點一下左邊“PHP Explorer”視窗裡的“todo”專案圖示,然後從“Run”選單下選取“bake all”指令:

- Aptana會在下方的“Console”視窗顯示“bake all”的輸出結果。“bake all”會依照/config/database.php所設定的連線資料,從資料庫裡截取每一個資料表,依序循問要不要建立相關的model程式。接下來的操作都要在“Console”視窗裡輸入指令:

- 因為todo資料庫裡只有一個“items”資料表,所以這裡也只顯示一個項目,請輸入 1 後按下Enter繼續:
Welcome to CakePHP v1.2.4.8284 Console
---------------------------------------------------------------
App : todo
Path: /Applications/MAMP/htdocs/todo
---------------------------------------------------------------
---------------------------------------------------------------
Bake All
---------------------------------------------------------------
Possible Models based on your current database:
1. Item
Enter a number from the list above, type in the name of another model, or 'q' to exit
[q] > 1 - 接下來bake指令就開始自動產生所有的基本程式。過程中好像會發生時區設定的小問題,但不影響程式的產生。然後會出現製作檔案的提示,你可以看看bake all為你製作了哪些檔案。完成後,會顯示“Bake all complete”:
One moment while the associations are detected.
Baking model class for Item...
Creating file /Applications/MAMP/htdocs/todo/models/item.php
Wrote /Applications/MAMP/htdocs/todo/models/item.php
Item Model was baked.
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /Applications/MAMP/htdocs/cake_1_2/cake/console/libs/tasks/model.php on line 879
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /Applications/MAMP/htdocs/cake_1_2/cake/console/libs/tasks/model.php on line 879
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /Applications/MAMP/htdocs/cake_1_2/cake/console/libs/tasks/model.php on line 930
Baking test fixture for Item...
Creating file /Applications/MAMP/htdocs/todo/tests/fixtures/item_fixture.php
Wrote /Applications/MAMP/htdocs/todo/tests/fixtures/item_fixture.php
Baking unit test for Item...
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /Applications/MAMP/htdocs/cake_1_2/cake/console/libs/tasks/model.php on line 736
Creating file /Applications/MAMP/htdocs/todo/tests/cases/models/item.test.php
Wrote /Applications/MAMP/htdocs/todo/tests/cases/models/item.test.php
Creating file /Applications/MAMP/htdocs/todo/controllers/items_controller.php
Wrote /Applications/MAMP/htdocs/todo/controllers/items_controller.php
Item Controller was baked.
Baking unit test for Items...
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /Applications/MAMP/htdocs/cake_1_2/cake/console/libs/tasks/controller.php on line 487
Creating file /Applications/MAMP/htdocs/todo/tests/cases/controllers/items_controller.test.php
Wrote /Applications/MAMP/htdocs/todo/tests/cases/controllers/items_controller.test.php
Creating file /Applications/MAMP/htdocs/todo/views/items/index.ctp
Wrote /Applications/MAMP/htdocs/todo/views/items/index.ctp
Creating file /Applications/MAMP/htdocs/todo/views/items/view.ctp
Wrote /Applications/MAMP/htdocs/todo/views/items/view.ctp
Creating file /Applications/MAMP/htdocs/todo/views/items/add.ctp
Wrote /Applications/MAMP/htdocs/todo/views/items/add.ctp
Creating file /Applications/MAMP/htdocs/todo/views/items/edit.ctp
Wrote /Applications/MAMP/htdocs/todo/views/items/edit.ctp
Bake All complete - 不過bake all完成後,還會繼續詢問是否產生其他model程式。如果再輸入一次選項 1 的話,bake all腳本會重新再製作一次所有的程式,而且檔案夾裡如果已經有重複的程式檔案的話,還會詢問你是否要“覆寫”?如果不要再重新產生或製作其他的model,請輸入 q 後按 Enter 結束bake all腳本:
---------------------------------------------------------------
Bake All
---------------------------------------------------------------
Possible Models based on your current database:
1. Item
Enter a number from the list above, type in the name of another model, or 'q' to exit
[q] > q
Exit - 請注意,Aptana的“PHP Explorer”視窗並不會立即顯示剛剛bake all所產生的所有新檔案。請在 todo 專案圖像上按右鍵,選擇“Refresh”後,才能看到剛剛新產生的程式檔。
到這裡我們已經用CakePHP產生一個基本的俱備資料庫CRUD功能的應用程式,但其實只改了database.php裡的一行參數加上括號而已,大部份的時間都是在設定Aptana的功能而已,一個完整的應用程式就給烤出來了產生了。接下來請在瀏覽器裡輸入 http://localhost/todo/items 這個網址,品嚐看看一口CakePHP為我們烤出來的todo蛋糕滋味如何?
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”專案
- 按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的基本應用。
CakePHP教學 on OSX(五)開發環境與伺服器測試:CakePHP in Aptana with MAMP
RoR的魔術之一,是可以透過Generator等用Ruby寫的腳本程式,一口氣自動地產生整個Model, Controller 跟 View等相關的基本程式碼。唯一可惜的是,這個魔術得在終端機視窗裡,手動地鍵入指令來執行。這種方式對於習慣OSX圖形介面(GUI)的人跟懶得記憶指令碼的我來,說真是一場惡夢。所幸Aptana的RadRails套件,把RoR的Generator等腳本都作成一個個的View視窗,可以透過GUI來選擇執行項目與輸入參數。我想光這個功能就可以讓Aptana登上OSX上的RoR開發環境的前幾名了:
Aptana還有內建主控台(Console)分割視窗來顯示輸出結果,不須要離開Aptana去打開“終端機”程式。Aptana甚至還有內建的瀏覽器,可以直接檢視網頁的輸出結果。只差了MySQL資料庫,如果用Splite這個RoR內建的簡單資料庫,開發RoR可以完全在Aptana內進行,不須要其他附加的軟體,可以說是名符其實一網打盡的整合式開發環境。(雖然RadRails還是需要系統預先安裝Xcode套件。安裝RadRails時,Aptana會要求安裝OSX的開發軟體Xcode,因為RadRails還是需要OSX系統內先安裝Ruby的Gem套件,這是Rails管理與安裝相關套件的必要工具。)
CakePHP in Aptana
CakePHP也有類似RoR的Generator自動程式碼產生器,名字叫cake bake的腳本程式。不過也跟RoR的Generator一樣,還是要使用命令列的方式,手動地由終端機上輸入像是火星文一般的指令;或是是透過PHP主控台來執行一個叫“cake.php”的程式。但是如果用了Aptana這類的IDE來還要這麼作,未免也太遜了。可惜Aptana 2.0已經沒有開發官方的PHP套件,除了麵包店裡這一篇“Setting up Eclipse to work with Cake”有解說如何整合Eclipse跟CakePHP之外,網路上也沒有相關Aptana整合CakePHP的中文訊息。不過既然Aptana是基於Eclipse,設定方法應該也類似。於是嘗試一下根據這篇的說明來操作,是了半天終於給試了出來。不過要在Aptana內直接使用cake bake腳本程式,得要先把cakephp輸入成Aptana的專案:
- 先確定Aptana已經安裝了PDT套件;MAMP已經啓動;並且在MAMP的網頁根目錄htdocs檔案夾裡已經把CakePHP檔案複製到cake_1_2檔案夾。接下來要把cake_1_2檔案夾,變成Aptana裡建立成一個專案(project):
- 按Aptana視窗左上角“新增圖像”右邊那個很小的“倒三角”(哎,這是從Eclipse來的彆腳介面),從選單裡選擇“Project...”;

- 接下來要選擇巫師(wizard?),請選擇PHP Project:

- 進入“PHP Project”視窗,專案名稱輸入 cake_1_2(最好跟檔案夾名稱一致)。因為要匯入cake_1_2這個檔案夾,這裡要選“Creat project form existing source”,然後按下“Browse...”按鈕:

- 找到 /Appliations/MAMP/htdocs 找 cake_1_2 檔案夾(找路徑的過程中請用“點二下”打開檔案夾,不要按右下角的“開啓”按鈕),找到cake_1_2 檔案夾後不要打開,按一下檔案夾圖像再按右下角的 “打開”按鈕:

- 回到“PHP Project”視窗,按下“Finish”結束:

- 如果本來的“Perspective”(透視?在Aptana/Eclipse 指的是配合不同開發目的,各個相關分割視窗的配製方式)不是PHP,會提示要不要開啓“PHP Perspective”。請按“Yes”,讓Aptana將畫面配製成適合PHP的形式:

- 接下來測試一下Aptana內建的網頁伺服器。因為Aptana沒有內建PHP的執行環境,請先確定MAMP伺服器已經開啓,否則無法執行.php檔案。在 cake_1_2 專案下的 index.php 上按右鍵,選取“Run As > PHP Web Page”:

- 第一次執行“Run As”,Aptana會提示確認檔案路徑,下次就會用相同地方式執行。請按“OK”:

- 如果一切正確,Aptana內建的瀏覽器會顯示CakePHP的首頁:

Bake in Aptana
CakePHP成為Aptana的專案後,接下來要製作Aptana執行cake bake的指令:
- 從Aptana的 Run 選單下選擇“External Tools Configurations...”:

- 先在“External Tools Configurations”視窗的側邊欄上點一下“Program”,然後按一下左上角的“新增”圖示:

- 新增後,在右邊的Name欄位輸入 bake ,然後按一下“Browse Workspace...”:

- 出現“Choose Location”視窗,找到 cake_1_2/cake/console 目錄點一下,然後點右邊的 cake 檔案(不是cake.bat或cake.php):

- 回到“External Tools Configurations”視窗,在“Working Directory:”欄位輸入:
${project_loc}
並在“Arguments:”欄位輸入:
bake

- 按一下右下角的“Apple”按鈕儲存指令,然後按一下“Run”按鈕執行腳本試看看。如果cake bake有執行的話,應該可以在下方的“Console”分割視窗看到輸出提示。現在只是測試腳本,還不要輸入任何項目,請按“Console”分割區右上方的紅色方塊停止cake bake腳本:

- 設定好之後,就可以在“Run > External Tools”選單下看到“bake”指令:

CakePHP 模版 .ctp 檔案編輯
跟CakePHP 1.1 版的模版檔案是 .thtml ,1.2版的模版檔案是 .ctp ,內容都是PHP或HTML的程式碼。但由於Aptana不認得 .ctp ,得要手動設定它跟PHP編輯器的關聯。方法如下:
- 從“Aptana Studio”選單下選擇“偏好設定(Preferences...)”:

- 從“Preferences”視窗的側邊欄找到的“General > Content Tpyes”,然後點一下右邊的“PHP Content Type”,然後按一下“Add”按鈕:

- 在“Content Type”欄位輸入 .ctp ,然後按“OK”:

- 接下來設定編輯器的關聯。在側邊欄找到的“General > Editor >File Associations”,然後按一下右邊的“Add”按鈕:

- 在“File Type”欄位輸入 .ctp ,然後按“OK”:

- 回到“Preferences”視窗,在右下方的“Associated editors:”欄位,點一下“PHP Editor”圖示,然後按一下“Default”按鈕儲存為預設值。最後再按“OK”關閉視窗。

- 以後 .ctp 檔案就會自動以PHP editor來編輯。
接下來就可以準備烤第一塊蛋糕了。
訂閱:
文章 (Atom)

