有些事情是每天都固定會做的事情,譬如每個平日早上都要看一下美股有沒有崩盤才有機會財富重新分配一下,每天下午一點半台股收盤時又賺了幾個便當錢,這種每天都要做但流程很繁瑣的就非常適用於今天的介紹:command
先前在介紹artisan時有提到將這些繁瑣的事情作成一個command這樣只要一鍵輸入即可獲得服務,但想要獲得股票收盤價這種服務還是需要更多的技術性的,所以還是先從基礎介紹起,先來試試看以一鍵可以在留言板sayHello為目標來當第一個command範例吧
php artisan make:command sayHello
接著就可以在app/Console/Commands/下面找到sayHello.php檔案,裡面有兩個屬性及一個功能要特別介紹
php artisan sayHello
即可php artisan list
時可以看到每個指令都有自己的介紹,就是利用這個屬性來描述該指令的用處,那就將它設定為Say hello to every by message boarduse App\Models\Message;
,然後在handle內實現功能Message::create([
'member' => 'admin',
'message' => 'Hello everyone',
]);
完成後可以使用php artisan list
來確認是不是已經有這個功能了
之後就可以使用指令來測試看看功能是否正常
php artisan sayHello
妥妥的沒有問題。
另外一個小撇步可以在signature屬性使用冒號來做群組分類,例如都是在處理留言板的command就在前面加上一個message:做前綴,這樣command越寫越多時會比較容易分類,新增一個sayHi來當範例
php artisan make:command sayHi
將sayHello的signature改為message:sayHello
sayHi的signature改為message:sayHi
此時再使用php artisan list
就可以看到這兩個指令已經被歸類在一起了
既然都有了一鍵執行的方法,能不能再更懶惰一點,讓系統自己定時執行就好,連打指令都可以省下了,那就需要搭配schedule的功能了。
在/app/Console/
之下可以找到一個Kernel.php的檔案將它打開,今天的目標先專注在schedule這個function就好,先將今天的command已一分鐘sayHello一次、五分鐘sayHi一次的頻率寫好。
$schedule->command('message:sayHello')->everyMinute();
$schedule->command('message:sayHi')->everyFiveMinutes();
接著來介紹一下schedule的四大指令
schedule:list
schedule:run
schedule:test
schedule:work
此時下完schedule:work後等待五分鐘就可以確認一下功能是否正常了
確認每分鐘都會有一個Hello並於每五分鐘為單位會出現一次Hi,今天的任務就算成功了,另外要提到的是我在建立sayHi這個schedule時因為沒有在上方引入Message的Model所以一直不會有sayHi的訊息寫入資料庫,讓我找問題找了蠻久,最後是在storage/logs裡的log紀錄找到原因,由此可知schedule在運行時有些錯誤是會被直接忽略的這點要特別注意一下。
排程能做的事情無窮無盡,就像這30天的文章也是利用排程自動上傳的,今天的介紹就到這邊結束了,謝謝觀看的各位,請記得按讚分享開啟小鈴鐺,你的支持會讓按讚數+1。