Site icon Alvin Chen Club

Larvel透過GeneratorCommand使用artisan產出php執行檔

Generator Command

Larvel透過GeneratorCommand使用artisan產出php執行檔

基本概念

將原始碼寫在.stub檔中,內容中如果有需要替換的則使用{{ }} 標記,例如 namespace {{ namespace }};

GeneratoreCommand會讀出.stub檔案將需要替換的文字替換完成後依照namespace寫入.php檔案

幾個需要理解的method與參數

首先參數的部分,固定第一個為name,也就是要產出的檔案名稱

method: getStub()

需要return .stub檔案的路徑,如果.stub檔案在vendor資料夾中則可以透過上篇說明來取得package中的檔案

透過namespace找到composer package中的檔案路徑

範例可以像這樣子,class中依照上一篇說明定義好get_file_path後,就可以找到指定的Vendor\package\路徑下的檔案了

如果是在同一個專案目錄中,則直接return專案中路徑即可

method: getDefaultNamespace()

需要return 產出php檔正確擺放位置的namespace,例如

這樣子就會把產出的php檔案放在app\Http\Controllers中

method: getNameInput()

return值作為檔案的名稱,也就是return command第一個參數name就行了,通常會把class name做大駝峰處理,範例如下

method: buildClass()

如果產出的php檔沒有其他需要替換的標記,或者沒有其他邏輯需要處理是可以不必處理buildClass()這個method,這邊提供一個範例

把stub內容中多組tag紀錄在$this->replace_tags中,然後再buildClass method中替換掉他

method: handle()

如果在產出檔案前,有需要對class的其他參數做調整,可以複寫handle() method,記得最後要return parent::handle()就好

例如像這樣

method: interact()

假設需要對輸入的參數做一些調整,可以透過複寫interact來達成,下面的範例處理了name參數,讓他變成首字大寫

最後提供一個完整範例

將virtualorz\mysdk中的 Stuns/http/controllers.stub 生成 /app/Http/Controllers/CustomerController.php

執行命令