目錄
1.胖模型,瘦控制器
#2.服務類別中的業務邏輯
#3.Eloquent 查詢優於原生 SQL 語句。
#4.DRY (Don't Repeat Yourself)
5.不要在 Blade 模板中執行查詢
6.使用資料庫事務
7.不要硬編碼文字
首頁 php框架 Laravel 7 個值得了解的 Laravel 最佳實踐

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

Jan 03, 2023 pm 08:24 PM
php laravel

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是跨站點偽造(CSRF),您如何在PHP中實施CSRF保護? 什麼是跨站點偽造(CSRF),您如何在PHP中實施CSRF保護? Apr 07, 2025 am 12:02 AM

在PHP中可以通過使用不可預測的令牌來有效防範CSRF攻擊。具體方法包括:1.生成並在表單中嵌入CSRF令牌;2.在處理請求時驗證令牌的有效性。

在PHP中解釋嚴格的類型(STRICT_TYPES = 1);)。 在PHP中解釋嚴格的類型(STRICT_TYPES = 1);)。 Apr 07, 2025 am 12:05 AM

PHP中的嚴格類型通過在文件頂部添加declare(strict_types=1);來啟用。 1)它強制對函數參數和返回值進行類型檢查,防止隱式類型轉換。 2)使用嚴格類型可以提高代碼的可靠性和可預測性,減少bug,提升可維護性和可讀性。

您如何防止班級被擴展或方法在PHP中被覆蓋? (最終關鍵字) 您如何防止班級被擴展或方法在PHP中被覆蓋? (最終關鍵字) Apr 08, 2025 am 12:03 AM

在PHP中,final關鍵字用於防止類被繼承和方法被重寫。 1)標記類為final時,該類不能被繼承。 2)標記方法為final時,該方法不能被子類重寫。使用final關鍵字可以確保代碼的穩定性和安全性。

Bangla 部分模型檢索中的 Laravel Eloquent ORM) Bangla 部分模型檢索中的 Laravel Eloquent ORM) Apr 08, 2025 pm 02:06 PM

LaravelEloquent模型檢索:輕鬆獲取數據庫數據EloquentORM提供了簡潔易懂的方式來操作數據庫。本文將詳細介紹各種Eloquent模型檢索技巧,助您高效地從數據庫中獲取數據。 1.獲取所有記錄使用all()方法可以獲取數據庫表中的所有記錄:useApp\Models\Post;$posts=Post::all();這將返回一個集合(Collection)。您可以使用foreach循環或其他集合方法訪問數據:foreach($postsas$post){echo$post->

PHP的未來:改編和創新 PHP的未來:改編和創新 Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

Laravel的地理空間:互動圖和大量數據的優化 Laravel的地理空間:互動圖和大量數據的優化 Apr 08, 2025 pm 12:24 PM

利用地理空間技術高效處理700萬條記錄並創建交互式地圖本文探討如何使用Laravel和MySQL高效處理超過700萬條記錄,並將其轉換為可交互的地圖可視化。初始挑戰項目需求:利用MySQL數據庫中700萬條記錄,提取有價值的見解。許多人首先考慮編程語言,卻忽略了數據庫本身:它能否滿足需求?是否需要數據遷移或結構調整? MySQL能否承受如此大的數據負載?初步分析:需要確定關鍵過濾器和屬性。經過分析,發現僅少數屬性與解決方案相關。我們驗證了過濾器的可行性,並設置了一些限制來優化搜索。地圖搜索基於城

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

See all articles