在黑白畫面打幾行指令,東西就跑出來了,在外人眼中看起來是相當的酷炫的行為。
而 Laravel 就提供了一個這樣的工具。
這個工具叫做 Artisan,它提供了一個方便的命令列介面(CLI)指令工具,讓開發者可以方便地執行指令,例如 Controller
、 Model
的創建,或是執行 migrate
,也可以用來啟動排程 schedule
。
學會 Artisan,可以將許多重複的瑣事轉換成自動化的行為,有助於提升開發效率,並減少錯誤的發生。
Laravel Artisan 基本用法
artisan
其實是一隻 PHP 程式,因此可以透過 PHP 來執行它。在 Laravel 專案目錄,使用下列指令,即可呼叫artisan
:
php artisan
也可以用直接執行 artisan
:
./artisan
我個人習慣用 php artisan
大家可以自由選擇自己喜歡的方式。
artisan
後方可以直接加指令名稱, 因此想知道有那些指令可以使用,可以透過 list
指令,list
將會列出所有可用指令,包含使用者自訂指令。
php artisan list
本篇以內建指令為主,之後有機會再來詳談使用者自定義指令。
常用指令
make 系列
make 指令顧名思義,就是用來產生檔案的指令,Artisan 預設提供了非常多種 make 指令,大家可以自己 list 出來看,這邊提供幾個作為範例。
make:controller
這個 make 指令用來產生 Controller,基本用法如下:
php artisan make:controller DemoController
執行成功後,會自動在 controller 的目錄中新增一個名為 DemoController.php
檔案,打開來看會發現基本的 Controller
的結構都準備好了。
controller 目錄在 Laravel 專案根目錄中的這個路徑:
app/Http/Controllers/
。
你也可以把 Controller
放在不同的目錄中,例如下方指令,會自動在 controller 目錄中新增一個 GoodJob
目錄,並且把 DemoController.php
放在裡面。
php artisan make:controller GoodJob\\DemoController
make:model
這個 make 指令用來產生 Model,基本用法如下:
php artisan make:model Demo
執行成功後,會自動在 model 目錄中新增一個名為 Demo.php
檔案,打開來看會發現基本的 Model
的結構都準備好了。跟 make:controller
一樣,可以改變產生 model 的目錄。
model 目錄在 Laravel 8.x 版後位於
app\Models
。
make:migration
make:migration
用來產生 migration 檔案,基本用法如下。指令後面接的名稱雖然是使用大寫駝峰式,但是 artisan 會自動轉換成蛇式命名。
php artisan make:migration CreateDemosTable
執行成功後,會自動在 migration 目錄中新增一個 migration 檔案,檔名的前綴是執行當下的日期跟時間。
2023_01_17_010715_create_demos_table.php
migration 目錄在 Laravel 專案根目錄中的這個路徑:
database/migrations/
。
其實也可以用 make:model
指令來同時產生對應的 migration 檔案,只要多加-m
一個選項,就可以了:
php artisan make:model Demo -m
這個指令會在對應的目錄中同時產生 model 及 migration 兩個檔案。
- Demo.php
- 2023_01_17_011722_create_demos_table.php
每個指令都可以使用 -h
來查看用途,大家可以自己試試看有什麼其他可以用的指令。
migrate 系列
migrate 指令是用來處理資料庫相關的,通常用來建立資料庫的 Schema 或填充一些初始資料。
migrate
migrate
是這系列最基本的指令,當一個新服務要啟動的時候,通常都是透過這個指令來完成資料庫的初始化,後續的如果資料庫的 Table 或資料有變化的話,也會透過這個指令來進行。
這個指令會讀取 migrations 目錄中的 migrations 檔案,會自動抓取還沒執行過的 migration 檔案來進行資料的 migrate。基本用法如下,成功執行後資料庫就會有對應的變更了。
php artisan migrate
migrate:fresh 及 migrate:refresh
fresh
跟 refresh
是兩個常用也常被混淆的指令。它們都可以用來讓資料庫回復初始狀態。
兩者差別在於,fresh
是比較簡潔粗暴的做法,它會直接 drop 所有的 table, 重新執行 migrate。而refresh
,則是使用 rollback 的方式,一個一個的把 table rollback後,再執行 migrate。用法如下:
php artisan migrate:fresh
php artisan migrate:refresh
大部分時候使用 fresh
是比較簡單乾淨的做法;如果有使用到其他服務也需要 migration 來管理的話,就可以用refresh
,因為它在執行 rollback 時會去呼叫 migration 檔案裡面的 down
函式,開發者可以自行在此撰寫相關的程式來處理其他服務的資料遷移。
migrate:status
這個指令可以用來查看目前 migration 的狀態,在執行 migrate
指令前可以先執行 migrate:status
,看看有哪些 migration 檔案是還沒有被執行的。
php artisan migrate:status
大部分 migrate 相關指令會實際影響到資料庫,因此在使用前要特別注意。
migrate 指令還可以搭配 seeder 使用,可以用來寫入一些基本資料,有興趣的人可以深入研究。
其他常用指令
route:list
這個指令用來查看目前有哪些 route 可以使用,會列出所有的 url 清單及其對應的 controller,有時候系統太複雜,或是想要了解系統有哪些服務可以使用的話,可以使用這個指令。
schedule 系列
如果系統有使用到自動排程程式,可以透過 schedule:run
來直接執行,或透過 schedule:work
指令自動執行。透過 schedule:list
可以查看目前有哪些自動排程程式。
tinker
這個指令提供一個互動式的 PHP 命令列工具。執行 php artisan tinker
後會進入 tinker
,在 tinker
中可以直接執行 PHP 指令。
而這個工具強大在於,它已經把整個 Laravel 專案目錄載入進去了,因此可以直接在 tinker
執行 Laravel 的函式, 對於測試相當方便,而對於想要實驗或執行 Laravel 程式,又不想要新增檔案的開發者來說相當方便。
結論
make
跟 migrate
是我開發時最常用的指令。而我最喜歡的指令是tinker
,因為它提供了一個環境,可以讓我輕易的操作系統,以維護跟測試的角度來說,相當方便。
當然,Laravel Artisan 還有很多指令可以使用,礙於篇幅這篇只挑選出幾個我平常比較經常使用的指令做介紹,另外 Laravel 每次推出新版時,多少會更動 Artisan 中的指令,大家可以自行 list
或多多利用 -h
來了解並學習有那些功能可以使用! 下次有機會可以介紹自定義指令的做法。