Drupal 與 Laravel

Laravel Drupal
Laravel Logo 圖片來源:https://github.com/laravel/art/blob/master/laravel-l-slant.png Drupal Logo 圖片來源:https://www.drupal.org/about/media-kit/logos

在爬文章的時候看到一則是討論 Drupal 8 與 Laravel-Drupal Vs. Laravel,看到當天晚上就把一些想法發表回應到文章下面,可是作者遲遲還沒有允許張貼,這幾天一樣跑去看那篇文章看,還是沒被公開發佈,就先把回應寫在自己的部落格上。(現在,作者已經公布了)

以下是我回應給作者的內容(有改了一些拼字、文法錯誤…)

Berfore starting to build and develop Drupal sites for over 1 year, I use Laravel framework. I think in some website types, eg. media and content, Drupal is more suitable. Because, in Drupal 7/8, the ImageStyle is powerful, it can process different image size for different device screens. Especially, in Drupal 8, the cache system allows to control the cache of page easily and flexible.

In the beginning of developing Drupal 7, I cannot accept and realize the configurations are in database. Although, the features module can help export the configs into code. Sometimes, when deploying into production or stage site, the exported features may break or encounter the different tid. In Laravel, all configs are in code. When deploying, developers only pull the branch and set the config values into environment variables.

Sometimes, I hate to take much time to work on the customized displays or modifying forms in Drupal, since in Laravel or others development, I only need to change HTML or blade. In Drupal, I should implement hook functions to alter rener array or Form API.

BTW, I prefer Drupal 8, due to OO design, new config management, service container, plugins system, event listener, routing and so on. They provides more structural ways to maintain and develop.

Drupal 8 與 Laravel 兩者各有優勢與要花時間的地方,再舉個例子來說,Drupal 8 設計非常彈性,對開發者來說也是雙面刃,因爲許多時候要花時間來找出問題原因,或是要大量的 trace 程式碼,舉個蠻明顯的例子:在 Drupal 8 中建立好 Entity type 之後,就可以儲存需要的資料了,而 Views 可以協助查詢需要的 Entities,顯示這些 Entites,不必要每次都要撰寫 SQL 指令。但是,當一般使用的 Views 並沒辦法符合開發需求的時候,可能就需要使用 Views 相關的 hook functions 來修改資料,當第一次要實作 hook function 時,會發現 Views 的相關的類別非常複雜,自己蠻常是用 XDebug 來看 ViewExecutable 物件的結構,對照 API 文件,看 Drupal Core 或其他類似模組的程式碼,來了解如何實作功能(有時候還是要去猜,然後驗證是不是跟自己想的一樣)。

還有一個感受蠻深的例子是建立表單的時候,在 Drupal 8 中,表單都是透過 Form API 來實作,所以會是一堆的 array 結構,加上 Drupal 的 Form 有不同階段的處理,以 FormBase 來說有許多階段,包含了建立表單的結構-buildForm(),驗證表單欄位的值-validateForm(),與處理送出的表單-submitForm(),而且這些處理的流程又可以透過修改 Form 的定義值(像是 #process, #valdiate)來改變,所以,要調整 contribute module 的表單會要花很多力氣來了解整個 Form 的運作。

而 Laravel 是依照自己的需求進行開發,在處理資料就必須透過 migration 建立資料庫資料表的結構,從資料庫讀取資料後以 Blade 樣板來顯示資料,修改資料的顯示只需要對 Blade 樣板進行調整。表單建立一樣是利用 Blade 樣板,表單驗證處理,能定義驗證的規則來檢查欄位的值。

如果要問選擇哪個,可能還是要評估自己團隊是擅長哪方面的開發,可能還是老話一句,沒有哪一個最好,就看團隊是如何來使用,跟習慣的開發方式。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料