精華區beta PHP 關於我們 聯絡資訊
   最近腦海中持續在策畫一些小型的專案,因為算是自己的興趣之作,也多了一些  彈性來參考一些新的框架。目前看起來, CI 在版上仍然多有討論, CI 也是我個人  接觸到的第一個框架;的確,到目前為止的 CI 開發經驗都相當不錯。我特別喜歡的  是 CI 讓我感覺在開發上仍然與一般 PHP 程式沒有太大的區別,但 MVC 的一些概念  算是蠻巧妙的把程式邏輯和美工設計等部份區隔開來。這是我從之前把 PHP Code 全  嵌入在 HTML 裡的時代一路走過來,感受得最深刻的地方。此外,我個人算是頗喜歡  那種自己刻程式的感覺,對於許多框架利用強大的指令介面直接刻出一個後台這樣的  模式我反而是比較覺得無所適從....  CodeIgniter is Dead?    總體來說, CI 的表現對我來說一直都算稱職。一些更厲害的版眾可能有其他的 看法,譬如說缺少 ORM Tool 或是 CI 是否是真正的 MVC Architecture 等的論述也  一直沒斷過。但是,對於我一個只是憑興趣開發點小程式的業餘小菜鳥,這些其實也  並沒有這麼深刻的感覺。只要是能解決問題、開發順手的就是個好框架。    最近無意間看到了 Shawn McCool 所寫的一篇文章,標題就如黃字那樣,有興趣  的版眾可以看一下。此外許多外國的文章也有類似的論述,看起來國外吹起一陣出走  潮;對照起臺灣網站 CI 一遍火熱的現象感覺也是頗有趣。不過,重點是,所有文章  似乎都指向了同一個對象-- Laravel 。  So ... What is Laravel?    就目前看來,版上似乎還沒有相關的討論,我也沒有實際使用開發一個專案過,  但國外網站上一面倒的好評還是讓我感到很有興趣,當個引子,分享給版眾,希望能  有一些討論。    Laravel 是一個新的框架,在 2011 年六月的時候釋出第一個版本,至於到目前  的版號則是來到了 3.2+ 。看得出來目前還在緊鑼密鼓的更新中,程式碼本身還不是  非常的穩定,或許未來還會有一些調整,但速度已經稍微放慢了。可能很快就有最新  版要出來,可以再觀查一下。  What does Laravel Provide?    Laravel 跟 CI 有許多頗為類似之處,下面我就目前看過的資料,統整幾個我認  為比較特別的部份給版眾做個參考。    框架文件      作者自己的部落格提到, CI 成功很大一部份是因為那份精美的文件(雖然    最新的功能文件似乎有點走下坡的感覺)。Laravel 也有一份這樣的文件,作者    也有保證未來一定會在文件完善之後才釋出最新版本。目前的文件,我覺得算是    提供了一些入門的參考,但實際開發上,可能還是會有一些問題,未來可能還是    要新增多點範例比較好上手。    Eloquent ORM      框架本身就內建了 Eloquent 這個工具,從文件看起來,的確在開發上可以    比 CI 少寫一些程式。有時候只需要一個空的模型定義,然後其他相關的函式就    憑空產生了,感覺很神奇。我自己是沒用過類似的功能,覺得挺新鮮的。也算是    補齊了 CI 被很多版眾棄嫌的一個空洞。    Authentication      框架內建一組會員驗證機制,從登入、登出、註冊到會員資料表一整套解決    方案。如果需要簡單會員系統的開發者這相當有用, CI 也是缺少了一個這樣的    解決方案,需要靠第三方程式模組來解決。只是這個機制我看起來感覺很死板,    如果我要以這個機制做出發點,去加上群組或是權限表這類的設計,感覺上不是    很容易可以辦到。    Artisan      Laravel 提供了一個命令列程式,我前面也提到我其實不是很喜歡這樣的東    西,畢竟有時候太強大的工具反而讓自訂的空間被限縮了,而且要在開發環境下    裝一些套件也不太是我的調調。 Artisan 是 PHP 寫的一支程式,用來安裝一些    模組還有產生專案的金鑰。如果完全不使用其實也可以完全忽略它的存在,但若    能使用的話也是提高了一些便利性,可以少做很多動作。它不能幫你生出什麼很    強大的後台,或許有些人有些失望,但對我來說,還算是洽到好處。它最強大的    功能我想應該是 Migration ;資料庫的 Schema 可以定義在一些 PHP 檔案裡,    多人專案的時候如果有人改動了 Schema ,只要進行 Migrate 的動作,就可以    讓 Schema 又是同步的,不會因為刪減欄位而讓原本的程式出錯。    Bundles      初次看文件的時候,發現大部份都是在講 MVC 、 Routing 還有 Database    的存取這類的東西,在 CI 上大量的元件庫看起來是一個也沒有。原來 Laravel    是採用一個模組化的概念,讓社群去開發對應的 Bundle 來增加功能。目前看來    有許多 CRM 、 Email 、 Authentication 這類的模組;類似的功能有很多不同    的模組可以用,同質性稍微高了一點,搜尋介面也還不是挺好。如果社群做大的    話應該不錯,或許有機會提供一些官方模組,動態安裝到專案裡就不用下載超大    的元件庫,增加彈性。只是目前 CI 的元件庫還是比較吸引我一些。    Auto Loading      之前寫 CI 的程式的時候常常需要 $this->load... 某個 View 、 Model,    這個在 Laravel 裡似乎是不需要這個動作,全部都是 static member 的呼叫,    也不需要去維護 autoloading 的檔案了。    Restful Controller      這功能跟 Routes 有一點關係,可以用 HTTP Verbs 來分隔程式邏輯,譬如    表單的驗證可以把表單網頁的邏輯放在一個區塊,而 POST 回自己的邏輯部份則    是放在另一個區塊,跟一般表單驗證用 if 區隔開來的做法有蠻大的不同。  What are the Disadvantages?    上頭針對我目前的理解做了一點簡單的說明。我覺得這些功能都是蠻好的,但是  版眾或許也注意到了,我多少也提出了一些我自己認為的問題,並不是全然正面的。  希望可以跟其他大家在網路上可以找到的一面倒稱讚有些區隔;如果真的是我誤解,  也期待可以有一些不同的討論。接下來的部份,我就再提一些以我這個小菜鳥的角度  真的覺得不是很方便的地方跟版眾做個分享。    資料夾架構      在官方文件中提到為了安全的考量,核心程式要放在網站根目錄外,至於要    對外的部份則是放在一個 public 資料夾裡。這部份官方的設計是要去修改虛擬    主機設定,指定一個 Virtual Host 並把 DocumentRoot 指到 public 資料夾。    先不說一些租用主機可能不允許你做這件事,這樣一來,每個專案都需要一個子    網域,譬如 aaa.host.com 或 bbb.host.com ,如果你剛好對網域管理又沒什麼    權限的話,真得會搞死人,還不如 CI 感覺簡單的多。我想對大部份的人來說,    能用 http://host.com/aaa/http://host.com/bbb/ 還是比較直覺簡單些。    網址設定      這部份感覺跟上一個問題也是很類似,假設我就是不要設 Virtual Host ,    而是把 laravel 目錄解在 /var/www/ 裡會怎樣呢?假設你的網域是 host.com    好了,打 http://host.com/laravel/ 會是文件不存在,因為你唯一可以對外的    是 public 資料夾,所以網址是 http://host.com/laravel/public 。就是那個    小小的 public 讓人心情不太美麗,網路上也有很多人在問怎麼消除 public 這    段網址,解法不外乎是 rewrite 、 symlink 和移動資料夾。symlink 畢竟也是    需要一些命令列權限,移動資料夾會破壞專案架構,都不是很漂亮的解法,偏偏    rewrite 試了網路上寫的幾組 rule 沒一組成功的,令人沮喪。    Routing      Routing 應該是把雙面刃,在 CI 裡面不需要設定太多,反正放對資料夾你    的程式就可以直接動了。但在 Laravel ,每個 Controllers 都得先註冊,不然    不能動。另外也可以針對 POST 、 GET 等不同的動作設不同的 Routing ,功能    實在是很強大。還有一些 filter 可以在 controller 執行前後做些動作,甚至    一些很短的 controller 還建議直接寫在 route rule 裡。這邊實在是令人有點    大開眼界,也呈現一種完全混亂的狀態。  Finally ....    我想這些差不多就是我與這個新框架短暫接觸過後的心得,目前我也還在持續尋  找一些教學或是相關的文章,希望對它能夠有更深入及正確的認識。多少因為看到了  國外一片叫好的聲浪,我覺得對這個新的框架也還是有點信心,但也不代表 CI 就是  真的走到了盡頭;畢竟前面也講到了一些問題,我覺得以我一個小菜鳥的角度來看,  對新加入的開發者來說其實並沒有真的這麼友善。期待未來可以看到版上有更多相關  的討論,大家可以一起討論、學習。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.134
kusoayan:關於一開始的 CI is dead 可以看看這篇 12/30 17:16
kusoayan:http://goo.gl/dAe8W 12/30 17:16
kusoayan:看看 Phil 怎麼說XD 12/30 17:17
liaosankai:文件真的很重要。像kohana3因為文件不友善而默默無名XD 12/30 18:44
glaci:有一套 php mvc framework 感覺也很好用, 叫 yii, 推薦 12/30 19:04
taikobo:推熱心分享 12/31 19:20
PTTLSboy:推! 01/01 02:29
Bambe:推~! 01/01 03:00