iT邦幫忙

2022 iThome 鐵人賽

DAY 7
1
Modern Web

Laravel 9 漫遊,享受魔法般的極速網頁開發體驗系列 第 7

Day 07:開始用到 Controller 了!來看看 Laravel 9 的 Controller 有什麼不同

  • 分享至 

  • xImage
  •  

寫得出前端畫面之後,根據上次的經驗,看來就是要開始引入 Controller 了!

我們一樣嘗試做一個名言機器人,這個機器人會隨機回傳以下一句激勵的名言給使用者。

  • 「失敗為成功之母。」- 愛迪生
  • 「簡潔是最終的精密。」– 李奧納多‧達文西
  • 「好的開始是成功的一半」- 荷拉斯

Controllers

我們設定 /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();
    }

這樣,我們就成功的做到了最初提的需求囉!

今天我們就分享到這邊。各位明天見!


上一篇
Day 06:優化我們的網頁外觀,善用 component 減少撰寫的前端程式
下一篇
Day 08:新世界的單元測試,另外加上覆蓋率分析!
系列文
Laravel 9 漫遊,享受魔法般的極速網頁開發體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言