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年5月13日 星期日
MAMP安裝 CodeIgniter+Sparks
- 由終端機換到CodeIgniter安裝目錄,這裡名稱為 CodeIgniter_2
- 執行MAMP的PHP指令
- 終端機顯示下載Sparks的訊息:
- CodeIgniter安裝目錄下會出現 tools 檔案夾。
- 接下來安裝ActiveRecod套件:
- 終端機顯示下載ActiveRecod的訊息:
- CodeIgniter的安裝目錄下會出現 sparks 檔案夾,其中出現 php-activerecord 檔案夾。在 application/core 檔案夾內也會出現 My_loader.php 檔案
cd /Applications/MAMP/htdocs/CodeIgniter_2
/Applications/MAMP/bin/php/php5.3.6/bin/php -r "$(curl -fsSL http://getsparks.org/go-sparks)"
Pulling down spark manager from http://getsparks.org/static/install/spark-manager-0.0.9.zip ... Pulling down Loader class core extension from http://getsparks.org/static/install/MY_Loader.php.txt ... Extracting zip package ... Cleaning up ... Spark Manager has been installed successfully! Try: `php tools/spark help`
/Applications/MAMP/bin/php/php5.3.6/bin/php tools/spark install php-activerecord
[ SPARK ] Retrieving spark detail from getsparks.org [ SPARK ] From Downtown! Retrieving spark from Git repository at git://github.com/machuga/php-activerecord-spark.git remote: Counting objects: 217, done. remote: Compressing objects: 100% (169/169), done. remote: Total 217 (delta 48), reused 191 (delta 25) Receiving objects: 100% (217/217), 127.24 KiB | 58 KiB/s, done. Resolving deltas: 100% (48/48), done. Switched to a new branch 'spark-63-1336902146' [ SPARK ] Spark installed to ./sparks/php-activerecord/0.0.2 - You're on fire!
2012年3月31日 星期六
2012年1月8日 星期日
Aptana 安裝 JDT 跟 Processing
根據:
- https://aptanastudio.tenderapp.com/discussions/problems/2426-aptana-and-ant
- http://code.google.com/p/proclipsing/wiki/GettingStarted
- http://processing.org/tutorials/eclipse/
- Help 選單選 Install New Software...
- 按 Add 鈕,加入
http://download.eclipse.org/releases/helios/http://download.eclipse.org/releases/indigo (Aptana 3.4 為 Eclipse indigo) - Work with 選
http://download.eclipse.org/releases/helios/http://download.eclipse.org/releases/indigo - Programming Languages 下勾選 Eclipse Java Develpment Tools
- 按下 Finish 開始安裝 JDT ~
- 回到步驟2. ,Name 輸入 proclipsing,Location 加入
http://proclipsing.googlecode.com/svn/tags/current_releases/proclipsingSite/然後按下 OK - 勾選 core 與 export ,按 Next> 開始安裝~
- 回到步驟2. 加入
http://eclipse.processing.org/plugin/site.xmlhttps://raw.github.com/processing/processing-eclipse/master/processing.plugin.updateSite/site.xml - 勾選 Processing Plug-In for Eclipse
- 按下 Finish 開始安裝 ~
http://web.archive.org/web/20120118072336/http://www.creativecoding.org/en/beyond/p5/eclipse_as_editor
2011年12月25日 星期日
PHPUnit 與 Selenium 整合
PHPUnit 與 selenium 整合,必須先用 pear 下載 phpunit/PHPUnit_Selenium 套件,否則無法連動。
- 切換到MAMP 2.0的/bin/php/php5.3.6/bin檔案夾,用pear下載 phpunit/PHPUnit_Selenium :
cd /Applications/MAMP/bin/php/php5.3.6/bin sudo ./pear install phpunit/PHPUnit_Selenium Password:
- 輸入管理員密碼後,會自動安裝好 phpunit/PHPUnit_Selenium 套件:
downloading PHPUnit_Selenium-1.1.3.tgz ... Starting to download PHPUnit_Selenium-1.1.3.tgz (17,425 bytes) ......done: 17,425 bytes install ok: channel://pear.phpunit.de/PHPUnit_Selenium-1.1.3
- 從http://seleniumhq.org/download/網站下載Selenium RC Server。目前是2.15.0版。解壓縮後,會得到 selenium-server-standalone-2.15.0.jar ,將檔案移到任何目錄都可以,例如 ~/Applications
- 打開終端機(不要用Aptana的Terminal),切換到 ~/Applications ,然後用Java執行:
cd ~/Applications java -jar selenium-server-standalone-2.15.0.jar
- Selenium RC Server執行後,終端機會出現以下提示。
2011/12/25 ?W?? 09:17:17 org.openqa.grid.selenium.GridLauncher main ??T: Launching a standalone server 09:17:22.613 INFO - Java: Apple Inc. 20.4-b02-402 09:17:22.615 INFO - OS: Mac OS X 10.7.2 x86_64 09:17:22.626 INFO - v2.15.0, with Core v2.15.0. Built from revision 15105 09:17:22.827 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 09:17:22.828 INFO - Version Jetty/5.1.x 09:17:22.828 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 09:17:22.829 INFO - Started HttpContext[/selenium-server,/selenium-server] 09:17:22.829 INFO - Started HttpContext[/,/] 09:17:22.874 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@13f6ba0f 09:17:22.875 INFO - Started HttpContext[/wd,/wd] 09:17:22.884 INFO - Started SocketListener on 0.0.0.0:4444 09:17:22.884 INFO - Started org.openqa.jetty.jetty.Server@4ee1d5ea
- 關閉終端機視窗就可以結束Selenium RC Server
2011年12月24日 星期六
2011年8月27日 星期六
Yii-1
- 前往MAMP網頁根目錄:
cd /Applications/MAMP/htdocs - 執行yiic腳本,產生 demo 網頁應用程式(不要用 sudo):
./yii//framework/yiic webapp demo
Password:
Create a Web application under '/Applications/MAMP/htdocs/demo'? [Yes|No] y - 測試 demo :
http://localhost/demo/index.php - 執行 yiic shell , 要指定 config 檔案路徑:
./protected/yiic shell ./protected/config/main.php - 產生 message 控制器與 helloWorld 函數:
>> controller message helloWorld - 測試 message 控制器與 helloWorld 函數:
http://localhost/demo/index.php?r=message
http://localhost/demo/index.php?r=message/helloWorld
2011年8月22日 星期一
MAMP 2.0 透過 pear 安裝 PHPUnit
- 刪除 MAMP 2.0.x 錯誤的設定檔:
sudo rm /Applications/MAMP/bin/php/php5.3.6/conf/pear.conf
- 前往MAMP的PEAR腳本檔案夾:
MAMP 1.9.x:
cd /Applications/MAMP/bin/php5.3/bin/
MAMP 2.0.x:
cd /Applications/MAMP/bin/php/php5.3.6/bin/
- 更新MAMP的PEAR:
sudo ./pear channel-update pear.php.net sudo ./pear upgrade pear
- 檢查PEAR版本:
./pear -V PEAR Version: 1.9.4 PHP Version: 5.3.6
- 安裝PHPUnit:
sudo ./pear channel-discover pear.phpunit.de sudo ./pear channel-discover components.ez.no sudo ./pear channel-discover pear.symfony-project.com sudo ./pear install --alldeps phpunit/PHPUnit
- 檢查PEAR套件:
./pear list Installed packages, channel pear.php.net: ========================================= Package Version State Archive_Tar 1.3.7 stable Cache_Lite 1.7.12 stable Console_Getopt 1.3.1 stable PEAR 1.9.4 stable Structures_Graph 1.0.4 stable XML_Util 1.2.1 stable
- 製作終端機可執行的 phpunit 捷徑:
MAMP 1.9.x
sudo ln -s /Applications/MAMP/bin/php5.3/bin/phpunit /usr/bin/phpunit
MAMP 2.0.x
sudo ln -s /Applications/MAMP/bin/php/php5.3.6/bin/phpunit /usr/bin/phpunit
- 安裝 vfStream :
sudo ./pear channel-discover pear.php-tools.net sudo ./pear install pat/vfsStream-alpha
- 測試 phpunit 捷徑:
phpunit PHPUnit 3.5.15 by Sebastian Bergmann. Usage: phpunit [switches] UnitTest [UnitTest.php] phpunit [switches] ....
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的網路連線上網了。
2010年2月22日 星期一
CakePHP教學 on OSX(七)Blog練習:(2)Blog資料庫設計
RoRy框架中有一個"資料遷移(mirgate)"物件,可以用Ruby語法透過自動地在資料庫中產生對應的資料庫架構(schema),學習上的好處是可以省去花在資料庫設計與結構查詢語言(SQL)上的功夫,只要專心熟悉Ruby語法即可。
而CakePHP則是相反地,是透過讀取一個既有的(通常是MySQL)資料庫架構,來產生相對的資料模型、控制器與視圖程式碼。因此預先設計並建立好一個資料庫,對於應用CakePHP框架來說非常重要,也比較符合PHP開發者原有的習慣。
Blog資料庫
首先應用之前“Todo”練習建立資料庫的方法,透過phpMyAdmin建立一個“blog”資料庫,以及同名的使用者“blog”並設定權限與密碼。
Blog資料表設計
跟之前“Todo”練習的資料庫只有一個資料表不同,Blog的資料必須分別使用多個資料表來儲存,並透過資料庫的關連功能來取得相關的資料。
第一個是“users”資料表的SQL:
第二個是“posts”資料表的SQL:
“users”跟“posts”兩個資料表的關係是所謂的“一對多”,也就是每一位“user”有很多篇的“posts”,但每一篇“post”只屬於一位“user”所有。用RoR框架開發時,要在資料模型程式中指明“user”跟“posts”兩個物件的關係,然後RoR會自動地在資料庫中產生相對的資料表。而用CakePHP開發時,CakePHP則是透過分析“user”跟“posts”兩個資料表,來產生資料模型程式的範本。
上一篇|下一篇:
而CakePHP則是相反地,是透過讀取一個既有的(通常是MySQL)資料庫架構,來產生相對的資料模型、控制器與視圖程式碼。因此預先設計並建立好一個資料庫,對於應用CakePHP框架來說非常重要,也比較符合PHP開發者原有的習慣。
Blog資料庫
首先應用之前“Todo”練習建立資料庫的方法,透過phpMyAdmin建立一個“blog”資料庫,以及同名的使用者“blog”並設定權限與密碼。
Blog資料表設計
跟之前“Todo”練習的資料庫只有一個資料表不同,Blog的資料必須分別使用多個資料表來儲存,並透過資料庫的關連功能來取得相關的資料。
第一個是“users”資料表的SQL:
CREATE TABLE `users` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT , `name` VARCHAR(100) DEFAULT NULL , `email` VARCHAR(150) DEFAULT NULL , `firstname` VARCHAR(60) DEFAULT NULL , `lastname` VARCHAR(60) DEFAULT NULL , `created` DATETIME DEFAULT NULL , `modified` DATETIME DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;依照CakePHP的命名慣例,“users”資料表名稱必須是複數名詞,主鍵(PRIMARY KEY)名稱是“id”。
第二個是“posts”資料表的SQL:
CREATE TABLE `posts` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT , `title` VARCHAR(255) DEFAULT NULL , `content` TEXT, `user_id` INT(11) DEFAULT NULL , `created` DATETIME DEFAULT NULL , `modified` DATETIME DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;依照CakePHP的命名慣例,“posts”資料表名稱也必須是複數名詞,主鍵(PRIMARY KEY)名稱也是“id”。為了避免混淆並指定關連的資料表,這裡以“user_id”欄位與“users”資料表建立關連性。注意,這裡“user_id”欄位是單數詞。還有跟書上的不同,這裡還是用“created”跟“modified”兩個魔術欄位來自動儲存製作與修改日期。
“users”跟“posts”兩個資料表的關係是所謂的“一對多”,也就是每一位“user”有很多篇的“posts”,但每一篇“post”只屬於一位“user”所有。用RoR框架開發時,要在資料模型程式中指明“user”跟“posts”兩個物件的關係,然後RoR會自動地在資料庫中產生相對的資料表。而用CakePHP開發時,CakePHP則是透過分析“user”跟“posts”兩個資料表,來產生資料模型程式的範本。
上一篇|下一篇:
2010年2月17日 星期三
CakePHP教學 on OSX(七)Blog練習:(1)命名習慣
CakePHP沿襲RoR的觀念,使用“慣例優於組態(Convention over Configuration)”的“設計典範(Design Paradigm)”。因此不論是程式檔案與功能函式的名稱、放置程式檔案的目錄名稱與路徑、或是資料庫表格的名稱與欄位的設計,都有一定的命名慣例。
依循慣例設計程式的好處,一方面可以讓CakePHP這種程式框架可以自動地產生相關的程式樣板以加速程式的開發的速度;另一方面也方便開發者閱讀與理解程式與函式之間的關聯性,方便程式的管理與維護。唯一的缺點,就是要注意英文名詞的單複數問題,避免使用程式框架已經使用到的關鍵字詞,同時要不小心迷失在一堆複雜的檔案路徑之中。
“類大檔小”與“模單表複”慣例
CakePHP是採用物件導向的程式編寫範式,因此每個程式檔案就是一個“類別(class)”。程式語法中,類別的名稱用“駝峰式命名法”,每個詞的第一個字母大寫,多個詞之間不留空白;但是程式檔案名稱則是全部小寫,多個詞之間要用“_”符號分開。
因為英文名詞有單複數的分別,所以基本上CakePHP命名方式也有單複之分。除了“模型(model)”類別通常是以(一個詞或多個詞組合的)單數名詞命名之外,“控制器(controller)”、“視圖(view)”程式,以及儲存模型的“資料表(table)”等等,都是以“複數名詞”命名。除非是“單複數同形”的名詞,不要忘了開加上“s”、“es”或“ies”的地方要正確(這是考托福嗎!?),以免整個CakePHP程式框架因為命名問題運作出錯。
因此按照CakePHP的命名方式,一個“User”類別有關的所有程式的命名與路徑如下:
模型:程式根目錄/models/user.php
控制器:程式根目錄/controllers/users_controller.php
視圖:程式根目錄/views/users/動作函式名稱.ctp
視圖檔案可以針對控制器中個別的動作函數指定,例如控制器UsersController之中的index函數的視圖檔案,應該是:程式根目錄/views/users/index.ctp
還好,大部份的時候我們可以用CakePHP提供的bake程式把這些檔案範本製作出來,不用自己傷腦筋命名問題。不過熟記這些命名與路徑慣例,對於修改與維護程式功能就很有用。不過跟RoR架構不同,CakePHP要先把資料庫架構好,才能用bake指令自動地“烤”出應用程式。
上一篇|下一篇:資料庫設計
依循慣例設計程式的好處,一方面可以讓CakePHP這種程式框架可以自動地產生相關的程式樣板以加速程式的開發的速度;另一方面也方便開發者閱讀與理解程式與函式之間的關聯性,方便程式的管理與維護。唯一的缺點,就是要注意英文名詞的單複數問題,避免使用程式框架已經使用到的關鍵字詞,同時要不小心迷失在一堆複雜的檔案路徑之中。
“類大檔小”與“模單表複”慣例
CakePHP是採用物件導向的程式編寫範式,因此每個程式檔案就是一個“類別(class)”。程式語法中,類別的名稱用“駝峰式命名法”,每個詞的第一個字母大寫,多個詞之間不留空白;但是程式檔案名稱則是全部小寫,多個詞之間要用“_”符號分開。
因為英文名詞有單複數的分別,所以基本上CakePHP命名方式也有單複之分。除了“模型(model)”類別通常是以(一個詞或多個詞組合的)單數名詞命名之外,“控制器(controller)”、“視圖(view)”程式,以及儲存模型的“資料表(table)”等等,都是以“複數名詞”命名。除非是“單複數同形”的名詞,不要忘了開加上“s”、“es”或“ies”的地方要正確(這是考托福嗎!?),以免整個CakePHP程式框架因為命名問題運作出錯。
因此按照CakePHP的命名方式,一個“User”類別有關的所有程式的命名與路徑如下:
模型:程式根目錄/models/user.php
class User extends AppModel {
var $name = 'User';
....
}
控制器:程式根目錄/controllers/users_controller.php
class UsersController extends AppController {
var $name = 'Users';
....
function index() {
....
}
}
視圖:程式根目錄/views/users/動作函式名稱.ctp
視圖檔案可以針對控制器中個別的動作函數指定,例如控制器UsersController之中的index函數的視圖檔案,應該是:程式根目錄/views/users/index.ctp
還好,大部份的時候我們可以用CakePHP提供的bake程式把這些檔案範本製作出來,不用自己傷腦筋命名問題。不過熟記這些命名與路徑慣例,對於修改與維護程式功能就很有用。不過跟RoR架構不同,CakePHP要先把資料庫架構好,才能用bake指令自動地“烤”出應用程式。
上一篇|下一篇:資料庫設計
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)

