Rumah  >  Artikel  >  rangka kerja php  >  7 Amalan Terbaik Laravel Yang Patut Diketahui

7 Amalan Terbaik Laravel Yang Patut Diketahui

青灯夜游
青灯夜游asal
2023-01-03 20:24:461650semak imbas

7 Amalan Terbaik Laravel Yang Patut Diketahui

Setiap pembangun web mempunyai gaya tersendiri ketika menulis kod. Pada masa yang sama, jika kita menggunakan rangka kerja Laravel, semuanya sudah sedia, tetapi selalunya kita menyalahgunakan istilah di sini. Ia bukan masalah besar apabila ia datang kepada gaya yang berbeza, tetapi kami perlu memastikan bahawa kod kami mengikut gaya yang baik. Ini bermakna kod kami mestilah boleh diperluas, boleh diselenggara dan boleh diuji. [Cadangan berkaitan: Tutorial Video Laravel]

Apakah yang menjadikan kod kami buruk atau baik? Oleh kerana PHP ialah bahasa berorientasikan objek, kita harus mengikut prinsip berorientasikan objek, seperti prinsip reka bentuk SOLID, dan mempertimbangkan untuk menggunakan mekanisme berorientasikan objek, seperti pewarisan, abstraksi, dsb. Selain itu, Laravel mempunyai komuniti yang besar dan kadangkala terdapat beberapa konvensyen ciptaan komuniti. Oleh itu, pembangun laravel lain yang mengikuti konvensyen ini dapat memahami kod kami dengan lebih baik dan lebih pantas. Dalam artikel ini, saya akan menunjukkan kepada anda 7 amalan terbaik tentang Laravel berdasarkan prinsip berorientasikan objek dan beberapa konvensyen komuniti Laravel.

1. Model gemuk, pengawal nipis

Jika kita mempunyai pembina pertanyaan yang sangat kompleks atau pernyataan SQL mentah, kita harus mengalihkan pertanyaan ini ke model atau Dalam gudang .

Buruk:

<?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]);
}

Baik:

<?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. Logik perniagaan dalam kelas perkhidmatan

Berkaitan dengan titik pertama di atas, kita harus mempunyai pengawal nipis dan kemudian kita harus memindahkan semua logik perniagaan ke dalam kelas perkhidmatan yang berasingan. Jadi pengawal sepatutnya hanya mempunyai satu tanggungjawab dan diharapkan kita boleh menggunakan semula perkhidmatan ini dalam pengawal lain.

Buruk:

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

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

    dispatch(new UserCreated($user));

    // ...
}

Baik:

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

    ....
}

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

3. Pertanyaan fasih adalah lebih baik daripada pernyataan SQL asli.

Menggunakan Eloquent untuk pertanyaan lebih mudah dibaca, mengelakkan suntikan SQL dan lebih mudah diselenggara.

Buruk:

<?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

Baik:

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

4.KERING (Jangan Ulang Sendiri)

Kita harus mempertimbangkan untuk memindahkan bahagian logik/komponen boleh guna semula ke tempat yang berasingan.
Dalam templat bilah, kami boleh menggunakan komponen untuk menggunakan semula bahagian hadapan. Dalam pelayan, kita boleh mengalihkan logik ke kelas perkhidmatan yang berasingan, skop Eloquent, atau bahkan mencipta pakej kita sendiri.

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

<h1>Custom Calendar</h1>

<x-custom-calendar>

</body>
</html>

5. Jangan laksanakan pertanyaan dalam templat Blade

Walaupun melaksanakan pertanyaan dalam templat Blade boleh dilakukan, sebaiknya jangan berbuat demikian.

Teruk. Akan menyebabkan masalah N+1.

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

Okey:

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

6. Gunakan transaksi pangkalan data

Jika kita mempunyai logik/pertanyaan yang rumit dan panjang, Maka kita harus mempertimbangkan untuk menggunakan transaksi pangkalan data. Dengan menggunakan ciri ini, kami boleh melancarkan semula pangkalan data dengan mudah jika perlu untuk memastikan data kami tidak disimpan ke pangkalan data, jadi kami yakin bahawa data kami boleh dipercayai.

<?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. Jangan hardcode teks

Kita tidak seharusnya mengeraskan sebarang teks dalam kod/pengawal. Ini menjadikannya mudah untuk diselenggara dan dilanjutkan pada masa hadapan. Jika kami ingin memaparkan mesej kepada pengguna, kami boleh menggunakan terjemahan, pemalar dalam model/kelas untuk menetapkan sebarang nilai atau fail konfigurasi untuk menyimpan konfigurasi kami.

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

Alamat asal: https://cerwyn.medium.com/7-best-practices-in-laravel-you-should-know-2ed9878293de

Alamat terjemahan : https://learnku.com/laravel/t/67021

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !

Atas ialah kandungan terperinci 7 Amalan Terbaik Laravel Yang Patut Diketahui. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn