首頁  >  文章  >  php框架  >  詳細介紹Laravel Action的撰寫步驟與實踐

詳細介紹Laravel Action的撰寫步驟與實踐

PHPz
PHPz原創
2023-04-21 10:05:50807瀏覽

Laravel是一個非常受歡迎的PHP開發框架,以其簡潔而強大的API和全面的工具包而備受歡迎。在Laravel中,「Actions」是一種概念,它可以讓你更輕鬆地建立控制器和簡化你的邏輯層。以下是詳細介紹Laravel Action如何寫的步驟和實作。

  1. 建立Action類別

首先,你需要建立一個Action類別。在Laravel 8以上版本中,可以透過Artisan指令來建立:

php artisan make:action MyAction

這將在app/Action目錄下為你建立一個新的類別檔案「MyAction.php」。現在,我們可以開始寫Action的邏輯了。

  1. 寫Action的邏輯

在你的Action中,你可以為控制器中的每個方法定義特定的業務邏輯。在這裡,我們將建立一個方法來處理使用者登入的邏輯。

<?php

namespace App\Actions;

use Illuminate\Support\Facades\Auth;

class LoginUserAction
{
    public function execute(array $credentials)
    {
        $attempt = Auth::attempt($credentials);

        if (!$attempt) {
            throw new \Exception(&#39;Invalid login credentials&#39;);
        }

        return Auth::user();
    }
}

在上面的範例中,我們建立了一個名為LoginUserAction的Action。它接收一個包含使用者登入憑證的數組,執行登入嘗試,如果有錯誤則會拋出異常,否則返回認證成功的使用者。

值得注意的是,我們使用Laravel的Auth門面來執行登入操作。這允許我們輕鬆地利用Laravel的認證系統。

  1. 在控制器中使用Action

現在,我們已經建立了一個Action類別並定義了其邏輯。下一步是在控制器中使用它。

使用Action的第一步是開啟控制器並新增一個use語句,以引入Action類別:

<?php

namespace App\Http\Controllers;

use App\Actions\LoginUserAction;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function login(Request $request, LoginUserAction $loginAction)
    {
        $credentials = $request->only(['email', 'password']);

        try {
            $user = $loginAction->execute($credentials);
        } catch (\Exception $e) {
            return response()->json([
                'message' => $e->getMessage()
            ], 401);
        }

        return response()->json(compact('user'));
    }
}

在上述程式碼中,我們從我們自己的命名空間中引用了LoginUserAction 。接著我們加入了 login() 方法,其首個參數是 Laravel 的 Request 對象,第二個參數是我們上面建立的 LoginUserAction 實例。

在 login() 中,我們首先也根據請求的內容提取 email 和 password,接著呼叫我們的 Action 透過 $credentials 的參數來執行邏輯。如果成功,我們將使用者以 JSON 格式傳回,否則我們將錯誤訊息傳回給客戶端。

  1. 呼叫Action

現在,我們可以存取我們的login()方法,並呼叫LoginUserAction類別中的execute方法。我們將在HTTP請求中傳遞一個數組,包含了一些登入憑證訊息,並傳回結果。

在路由中定義對應的登入路由:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;

Route::post(&#39;/login&#39;, [AuthController::class, &#39;login&#39;])->name('login');

現在我們可以存取我們的laravel應用程式的/login路由,會像這樣:

POST /login HTTP/1.1
Host: localhost:8000
Content-Type: application/json

{
    "email": "user@example.com",
    "password": "my_password"
}

這將觸發我們在控制器中定義的login() 方法,呼叫LoginUserAction,傳入email 和password 作為參數。

  1. 總結

Laravel Action 提供了一個簡單、乾淨的方法來組織你的業務邏輯。將業務邏輯從控制器中移出並放入 Action 類別中,你可以帶來許多程式碼重複使用和可維護性的提升。

在使用 Laravel Action 時,你應該遵循以下兩個最佳實踐:

  • 每個方法應該盡量只做一件事情。
  • 避免在 Action 類別中直接存取外部類別或對象,使用傳遞變數的方式來實現資料的共通和重複的處理。

最後,需要注意的是,在Laravel 8 中引入了Action 功能,如果你使用的是較舊版本的Laravel,可能需要手動建立Action 類,並將類別檔案儲存在一個合適的位置,然後在控制器中手動實例化和呼叫。

以上是詳細介紹Laravel Action的撰寫步驟與實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn