寫得出前端畫面之後,根據上次的經驗,看來就是要開始引入 Controller 了!
我們一樣嘗試做一個名言機器人,這個機器人會隨機回傳以下一句激勵的名言給使用者。
我們設定 /inspire
這個路徑,來滿足上面所說的需求
Route::get('/inspire');
在以前,我們會使用一段文字,標記應該使用的函式位置:
Route::get('/inspire', 'InspireController@inspire');
這樣的寫法雖然也很直覺,不過有個小缺點:
對編輯器來說,'InspiringController@inspire'
是一段純文字,編輯器並不知道這邊說的是 InspireController
裡面的 inspire
函數。
所以,如果這邊打錯字,那麼編輯器是不能幫助你發現錯誤的。
現在的 Laravel,更鼓勵用以下的方式,來標記 controller 和對應的函數名稱:
use App\Http\Controllers\InspireController;
Route::get('/inspire', [InspireController::class, 'inspire']);
這樣一來,如果我們不小心打錯了 controller 的名字,編輯器就能順利地發現這個類別不存在了。
首先,我們一樣利用 artisan
來建立 InspireController
$ ./vendor/bin/sail artisan make:controller InspireController
Controller created successfully.
建立好了之後,在 routes/web.php
加上
use App\Http\Controllers\InspireController;
Route::get('/inspire', [InspireController::class, 'inspire']);
接著,為了更好的拆分職責,如同之前文章([Day 7] 需要用到 Controller 了!淺聊一下網頁 MVC 框架的概念)的作法一樣,
我們建立 app/Services
資料夾,並建立 app/Services/InspireService.php
<?php
namespace App\Services;
/**
* Class InspiringService
*/
class InspireService
{
/**
* @return string
*/
public function inspire(): string
{
$quotes = [
'「失敗為成功之母。」- 愛迪生',
'「簡潔是最終的精密。」– 李奧納多‧達文西',
'「好的開始是成功的一半」- 荷拉斯',
];
$key = rand(0, 2);
return $quotes[$key];
}
}
然後,在 InspireController
內使用直接宣告的方式,讓 InspireController
可以取用 InspireService
/**
* @return string
*/
public function inspire(): string
{
return (new InspireService())->inspire();
}
這樣,我們就成功的做到了最初提的需求囉!
今天我們就分享到這邊。各位明天見!