首頁  >  文章  >  php框架  >  7 個值得了解的 Laravel 最佳實踐

7 個值得了解的 Laravel 最佳實踐

青灯夜游
青灯夜游原創
2023-01-03 20:24:461647瀏覽

7 個值得了解的 Laravel 最佳實踐

每個 web 開發人員在寫程式碼時都有自己的風格。同時,如果我們使用 Laravel 框架,一切都準備就緒,但通常我們在這裡誤用了術語。涉及不同的風格問題不大,但我們必須確保我們的程式碼遵循良好的風格。這意味著我們的程式碼必須可擴展,可維護和可測試。 【相關推薦:laravel影片教學

是什麼讓我們的程式碼變得糟糕或好?因為PHP是一種物件導向的語言,我們應該遵循物件導向的原則,如 SOLID 設計原則,並考慮使用物件導向機制,如繼承,抽像等。此外,Laravel有一個大社區,有時會有一些社區創造的約定。因此,其他遵循這些約定的 laravel 開發人員能夠更好地、更快地理解我們的程式碼。在本文中,我將根據物件導向原則和一些 Laravel 社群約定,在 Laravel 上向你展示7個最佳實踐。

1.胖模型,瘦控制器

如果我們有一個非常複雜的查詢建構器或原始SQL語句,我們應該將此查詢移至模型或倉庫中。

壞的:

<?php
public function index()
{
    $partners = Partner::where(&#39;email_verified_at&#39;, &#39;!=&#39;, null)
        ->with([&#39;products&#39; => function ($q) {
            $q->whereDate(&#39;created_at&#39;, now());
        }])
        ->get();

    return view(&#39;index&#39;, [&#39;partners&#39; => $partners]);
}

好的:

<?php
public function index()
{
    return view(&#39;index&#39;, [&#39;partners&#39; => $this->partner->newProducts()]);
}

class Partner extends Model
{
    public function newProducts()
    {
        return $this->where(&#39;email_verified_at&#39;, &#39;!=&#39;, null)
            ->with([&#39;products&#39; => function ($q) {
                $q->whereDate(&#39;created_at&#39;, now());
            }])
            ->get();
    }
}

#2.服務類別中的業務邏輯

與上述第一點相關,我們應該有一個瘦控制器,然後我們應該將所有業務邏輯移動到單獨的服務類別。所以控制器應該只有一個職責,希望我們可以在其他控制器中重複使用這個服務。

壞的:

<?php
public function store(Request $request)
{
    $user = User::create();

    $user->update([&#39;last_login&#39; => now()]);

    dispatch(new UserCreated($user));

    // ...
}

好的:

<?php
public function store(Request $request)
{
    $this->userService->create($request);

    ....
}

class UserService
{
    public function create($request)
    {
       // ...
    }
}

#3.Eloquent 查詢優於原生 SQL 語句。

使用 Eloquent 進行查詢更具可讀性,避免 SQL 注入,並且易於維護。

壞的:

<?php
SELECT *
FROM `articles`
WHERE EXISTS (SELECT *
              FROM `users`
              WHERE `articles`.`user_id` = `users`.`id`
              AND EXISTS (SELECT *
                          FROM `profiles`
                          WHERE `profiles`.`user_id` = `users`.`id`) 
              AND `users`.`deleted_at` IS NULL)
AND `verified` = &#39;1&#39;
AND `active` = &#39;1&#39;
ORDER BY `created_at` DESC

好的:

<?php
Article::has(&#39;user.profile&#39;)->verified()->latest()->get();

#4.DRY (Don't Repeat Yourself)

##我們應該考慮將可重複使用的邏輯/元件部分移動到單獨的地方。

在 blade 模板中,我們可以使用元件來重複使用前端部分。在伺服器中,我們可以將邏輯移動到一個單獨的服務類別、Eloquent scope作用域,甚至可以建立我們自己的套件。

<!DOCTYPE html>
<html>
<head>
<title>DRY</title>
</head>
<body>

<h1>Custom Calendar</h1>

<x-custom-calendar>

</body>
</html>

5.不要在 Blade 模板中執行查詢

#儘管在 blade 模板中執行查詢是可行的, 但最好不要這麼做。

壞的。將會造成 N 1 問題。

@foreach (User::all() as $user)
    {{ $user->email }}
@endforeach

好的:

$users = User::all(); // Server Query
@foreach ($users as $user)
    {{ $user->email }}
@endforeach

6.使用資料庫事務

如果我們有一些複雜而冗長的邏輯/查詢,那麼我們應該考慮使用資料庫事務。透過使用此功能,我們可以在需要時輕鬆回滾資料庫,以確保我們的資料不會保存到資料庫中,因此我們確信我們的資料是可靠的。

<?php
public function store(Request $request)
{
    DB::beginTransaction();
    $user = User::create();
    $response = app(&#39;service&#39;)->create($user);

    if (!$response) {
      DB::rollback();
      return;
    }
    // ...
    DB::commit();
 }

7.不要硬編碼文字

我們不應該在程式碼/控制器中硬編碼任何文字。這樣以後很容易維護和擴充。如果我們想向使用者顯示訊息,我們可以使用翻譯,模型/類別中的常數來設定任何值或設定檔來保存我們的配置。

trans(&#39;user.created&#39;); // &#39;User Successfully Created&#39;
$types = Product::TYPES; // Const in a Class/Model

原文網址:https://cerwyn.medium.com/7-best-practices-in-laravel-you-should-know-2ed9878293de

譯文網址:https ://learnku.com/laravel/t/67021

更多程式相關知識,請造訪:

程式設計影片! !

以上是7 個值得了解的 Laravel 最佳實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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