Rumah >pembangunan bahagian belakang >tutorial php >Amalan, Petua dan Trik Terbaik Laravel untuk 5

Amalan, Petua dan Trik Terbaik Laravel untuk 5

Linda Hamilton
Linda Hamiltonasal
2024-10-30 00:17:29712semak imbas

Laravel Best Practices, Tips, and Tricks for 5

Menjelang tahun 2025, Laravel terus menjadi pilihan utama untuk pembangunan web, menawarkan pembangun alat untuk mencipta aplikasi yang berkuasa dan cekap. Artikel ini menggariskan amalan terbaik, petua dan helah utama yang boleh meningkatkan kualiti kod anda dan memperkemas aliran kerja anda, sama ada anda menggunakan Laravel 9, 10 atau 11. Cerapan ini akan membantu anda memanfaatkan Laravel sepenuhnya dan meningkatkan kemahiran pembangunan anda , tidak kira sama ada anda seorang pemula atau pembangun berpengalaman.

Pastikan Laravel dan Pakej dikemas kini

Mengekalkan kemas kini Laravel mempunyai beberapa faedah utama:

  • Keselamatan yang Dipertingkat: Keluaran biasa termasuk pembetulan keselamatan penting yang melindungi aplikasi anda.
  • Prestasi Lebih Baik: Kemas kini sering meningkatkan prestasi, membawa kepada masa pemuatan yang lebih cepat dan kod yang lebih cekap.
  • Ciri dan Fungsi Baharu: Kekal terkini untuk memanfaatkan ciri baharu yang meningkatkan pengalaman pembangunan.
  • Keserasian: Pastikan keserasian yang lebih baik dengan pakej rasmi dan komuniti terkini.

Menjalankan kemas kini komposer secara kerap adalah penting untuk memastikan pakej anda dikemas kini. Amalan mudah ini ialah salah satu cara terbaik untuk memastikan pakej anda dikemas kini dengan ciri terkini dan tampung keselamatan.

Jika anda teragak-agak tentang kemas kini, ini mungkin menunjukkan bahawa kod anda tidak diuji dengan secukupnya. Dengan mengamalkan amalan ujian, anda boleh memastikan kemas kini utama tidak melanggar kod anda, membolehkan anda memanfaatkan sepenuhnya peningkatan Laravel.

Jika anda memilih untuk tidak mengemas kini secara manual, pertimbangkan untuk menggunakan ServBay, alat pengurusan persekitaran yang telah menyepadukan versi beta PHP 8.4, menjadikannya lebih mudah untuk memastikan Laravel dan pelbagai pakej dikemas kini.

Cegah Ralat Kritikal dengan Mengekalkan Ujian Kuat

Pengujian automatik adalah bidang yang luas namun sering dipandang remeh. Walau bagaimanapun, ia adalah salah satu amalan terbaik yang paling penting untuk memastikan kebolehpercayaan projek.

Faedah utama mengekalkan suite ujian yang mantap termasuk:

  • Kurang Pepijat: Ujian biasa membantu menangani isu lebih awal, yang membawa kepada pangkalan kod yang lebih stabil.
  • Pelanggan Lebih Bahagia: Perisian yang boleh dipercayai menghasilkan pengguna yang berpuas hati yang boleh mempercayai produk anda.
  • Majikan Berpuas Hati: Projek yang diuji dengan baik mencerminkan profesionalisme dan komitmen terhadap kualiti.
  • Pembangun Yakin: Dengan suite ujian yang komprehensif, anda boleh membuat perubahan tanpa perlu risau tentang memperkenalkan ralat baharu. Kembali ke projek selepas rehat menjadi kurang menakutkan.

Apabila mengubah suai kod, cuma jalankan ujian artisan php untuk mengenal pasti sebarang fungsi yang rosak, selesaikan isu dan ulangi proses!

Ujian automatik boleh meningkatkan kestabilan projek dengan ketara, sekali gus meningkatkan kerjaya anda.

Untuk membantu anda bermula, Laracasts menawarkan kursus ujian percuma. Anda boleh belajar tentang PHPUnit (standard industri) dan Pest (rangka kerja ujian moden yang memudahkan ujian PHP). Kursus "Perosak Daripada Calar" amat disyorkan.

Ikut Organisasi Direktori Lalai

Pernahkah anda memikirkan mengapa anda perlu menggunakan rangka kerja seperti Laravel?

Kerangka menyediakan pendekatan berstruktur untuk pembangunan, memastikan semua ahli pasukan kekal konsisten dan berusaha ke arah matlamat yang sama. Ia datang dengan ciri yang kaya, kompleks dan diuji pertempuran, membolehkan anda menumpukan pada aspek unik projek anda tanpa terperangkap dengan butiran.

Jadi, adakah mengikut struktur projek lalai Laravel dianggap sebagai amalan terbaik? Sudah tentu! Inilah sebabnya:

  • Kemudahan: Konvensyen dan struktur Laravel didokumenkan dengan baik. Apabila anda kembali ke projek beberapa minggu atau bulan kemudian, anda akan menghargai kejelasan dan kebiasaan persediaan lalai.
  • Kerjasama Pasukan: Apabila bekerja dengan ahli pasukan, semua orang memahami konvensyen Laravel, menjadikan kerjasama lebih mudah. Memanfaatkan pengetahuan yang dikongsi ini boleh memacu projek ke hadapan, dan bukannya mencipta semula roda pada setiap masa.

Gunakan Permintaan Borang Tersuai untuk Pengesahan Kompleks

Permintaan borang tersuai dalam Laravel ialah alat berkuasa untuk mengendalikan pengesahan, memberikan beberapa kelebihan utama:

  • Guna Semula Logik Pengesahan: Gunakan semula peraturan pengesahan dengan mudah merentas berbilang pengawal, memastikan kod anda KERING (Jangan Ulangi Sendiri).
  • Kurangkan Kembung Pengawal: Muatkan kod pengesahan ke kelas permintaan borang khusus, memastikan pengawal bersih dan fokus pada logik perniagaan.

Mencipta Permintaan Borang Tersuai

Membuat permintaan borang tersuai adalah mudah. Jalankan sahaja arahan Artisan berikut:

php artisan make:request StorePostRequest

Kemudian, dalam pengawal anda, anda hanya boleh menaip-membawa permintaan:

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}

Mempertingkatkan Permintaan Borang Tersuai

Permintaan borang tersuai juga boleh memasukkan logik tambahan di luar pengesahan. Sebagai contoh, anda boleh menormalkan data input sebelum ia mencapai pengawal dengan mengatasi kaedah prepareForValidation:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}

Dalam contoh ini, kaedah menjana slug secara automatik daripada tajuk sebelum proses pengesahan berlaku.

Pengurusan Kebenaran

Permintaan borang tersuai juga boleh mengendalikan logik kebenaran. Jika anda mendapati penggunaan dasar menyusahkan, anda boleh menyertakan semakan kebenaran ringkas secara terus dalam permintaan borang.

Permudahkan Pangkalan Kod Anda dengan Pengawal Tindakan Tunggal

Walaupun mengikut amalan terbaik, pengawal boleh menjadi sukar digunakan. Penyelesaian yang hebat ialah menggunakan pengawal tindakan tunggal dalam Laravel. Pengawal ini direka bentuk untuk mengendalikan satu tindakan, bukannya berbilang tindakan seperti pengawal sumber standard.

Mencipta Pengawal Tindakan Tunggal

Untuk mencipta pengawal tindakan tunggal, gunakan perintah Artisan berikut:

php artisan make:request StorePostRequest

Arahan ini mencipta pengawal dengan hanya satu tindakan, bernama __invoke. Untuk mendapatkan maklumat lanjut tentang kaedah sihir __invoke, rujuk dokumentasi Laravel.

Menentukan Laluan

Dengan pengawal tindakan tunggal, anda boleh memudahkan definisi laluan. Inilah cara untuk menggunakannya dalam laluan anda:

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}

Amalan Terbaik Subjektif

Menggunakan pengawal tindakan tunggal ialah amalan terbaik subjektif. Terpulang kepada anda dan pasukan anda untuk menentukan sama ada pendekatan ini sesuai dengan struktur projek dan keutamaan kebolehbacaan.

Gunakan Middleware untuk Mengelakkan Penduaan Kod

Dalam Laravel, middleware ialah alat berkuasa yang membolehkan anda menapis atau mengubah suai permintaan masuk. Dengan memanfaatkan perisian tengah, anda boleh mengelakkan pertindihan kod dan memastikan pengawal bersih dan terurus. Berikut ialah beberapa kes penggunaan middleware biasa:

  • Semak Kebenaran Diperlukan: Pastikan pengguna mempunyai kebenaran yang diperlukan untuk mengakses laluan tertentu.
  • Tetapkan Tempat Pengguna: Semak bahasa pilihan pengguna dan laraskan tempat aplikasi dengan sewajarnya.

Laravel menyediakan pelbagai perisian tengah terbina dalam untuk tugas biasa, seperti pengesahan dan pengehadan kadar.

Mencipta Perisian Tengah Tersuai

Untuk mencipta perisian tengah tersuai, gunakan perintah Artisan berikut:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}

Dalam perisian tengah anda, anda boleh menentukan logik untuk mengendalikan permintaan. Berikut ialah contoh perisian tengah yang menyemak sama ada pengguna mempunyai cukup token:

php artisan make:controller ShowPostController --invokable

Melampirkan Middleware pada Laluan

Setelah anda menentukan perisian tengah anda, anda boleh melampirkannya pada sebarang bilangan laluan. Pendekatan modular ini membantu memastikan kod anda bersih dan mengurangkan pertindihan dalam pengawal.

use App\Http\Controllers\ShowPostController;

// Single action controller route
Route::get('/posts/{post}', ShowPostController::class);

Gunakan Dasar untuk Kebenaran

Menggunakan dasar untuk kebenaran dalam Laravel adalah penting untuk membina aplikasi yang jelas dan boleh diselenggara. Tiga faedah utama menggunakan polisi ialah:

  • Logik Keizinan Dikongsi Merentas Pengawal: Dengan menggabungkan peraturan kebenaran ke dalam dasar, anda menggalakkan ketekalan dan menghapuskan kod pendua dalam aplikasi anda.
  • Kerumitan Pengawal yang Dikurangkan: Mengalihkan logik kebenaran kepada dasar membolehkan pengawal menumpukan pada tugas utama mereka, menghasilkan kod yang lebih bersih dan lebih mudah difahami.
  • Akses Ringkas kepada Kod Kebenaran: Dasar terletak dalam direktori apl/Dasar, memudahkan pembangun mencari dan mengubah suai peraturan kebenaran apabila diperlukan.

Mari kita lihat senario praktikal menggunakan dasar untuk kemas kini siaran:

php artisan make:request StorePostRequest

Pastikan Migrasi adalah Terkini

Migrasi ialah satu cara untuk mentakrifkan skema pangkalan data menggunakan kod PHP tulen. Anda boleh menganggapnya sebagai alternatif kod kepada phpMyAdmin, menyediakan cara terprogram untuk mengurus struktur pangkalan data anda. Pendekatan ini amat berfaedah untuk pasukan, kerana ia membolehkan semua orang meniru persekitaran pembangunan yang sama pada mesin tempatan mereka dan mengekalkan sejarah perubahan yang jelas dalam Git.

Migrasi juga memudahkan penggunaan projek ke persekitaran baharu (seperti pementasan atau pengeluaran) tanpa perlu mengeksport pangkalan data daripada persekitaran lain. Walau bagaimanapun, perangkap biasa ialah sesetengah pembangun membuat perubahan terus kepada pangkalan data dan bukannya mencipta migrasi baharu. Amalan ini boleh menyusahkan ahli pasukan lain, yang mungkin perlu meminta pembuangan pangkalan data melalui Slack. Untuk meningkatkan projek dan mengekalkan konsistensi, adalah penting untuk menggunakan migrasi dengan berkesan.

Gunakan Migrasi Tanpa Nama untuk Mencegah Konflik (Laravel 8 dan Ke Atas)

Penghijrahan tanpa nama ialah penyelesaian yang berkesan untuk mengelakkan konflik nama kelas. Dengan ciri ini, anda boleh membuat berbilang migrasi bernama "update_posts_table" tanpa menghadapi ralat, mengurangkan geseran semasa proses pembangunan.

Dalam Laravel 9 dan ke atas, apabila anda menjalankan perintah berikut, migrasi tanpa nama dijana secara automatik:

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}

Struktur migrasi ini kelihatan seperti ini:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}

Menariknya, anda juga boleh melaksanakan migrasi tanpa nama dalam Laravel 8. Untuk melakukan ini, cuma gantikan nama kelas dengan kembalikan kelas baharu dan pastikan anda memasukkan koma bertitik pada penghujungnya. Dengan cara ini, anda boleh menikmati faedah migrasi tanpa nama walaupun dalam versi terdahulu.

Laksanakan Kaedah down() untuk Rollback dengan betul

Kaedah down() digunakan oleh perintah php artisan migrate:rollback untuk membalikkan perubahan yang dibuat pada pangkalan data. Apabila sesetengah pembangun memilih untuk melaksanakannya manakala yang lain tidak, adalah penting untuk memastikan bahawa jika anda menggunakannya, kaedah down() anda ditakrifkan dengan betul.

Pada asasnya, kaedah bawah() harus membalikkan operasi yang dilakukan dalam kaedah atas(). Berikut ialah contoh asas:

php artisan make:request StorePostRequest

Jika anda memilih untuk tidak menggunakan kaedah down(), anda boleh memadamkannya.

Ikuti Konvensyen Penamaan Jadual Pangkalan Data Eloquent

Mematuhi konvensyen penamaan jadual Laravel ialah amalan terbaik mudah yang boleh memberi manfaat besar kepada pasukan anda. Apabila anda menggunakan perintah Artisan, rangka kerja mengendalikan konvensyen ini secara automatik, seperti php artisan make:model Post --migration --factory.

Jika, atas sebab tertentu, anda tidak boleh menggunakan arahan ini, berikut ialah panduan ringkas:

  • Untuk model bernama Post, jadual yang sepadan hendaklah dinamakan jawatan, menggunakan bentuk jamak. Contohnya:

    • Model ulasan → jadual ulasan
    • Model balas → jadual balasan
  • Untuk jadual pangsi yang menyambungkan Siaran dan Ulasan (cth., siaran_komen):

    • Gunakan bentuk tunggal kedua-dua nama.
    • Susunnya mengikut susunan abjad.

Untuk butiran lanjut, rujuk dokumentasi rasmi.

Elakkan Masalah N 1 dengan Menggunakan Eager Loading

Terdapat lebih banyak amalan terbaik untuk dilindungi! Adakah anda mengalami masalah N 1? Pemuatan yang bersemangat adalah cara yang berkesan untuk menghalangnya.

Sebagai contoh, jika anda memaparkan senarai 30 siaran dan pengarangnya, kerana malas memuatkan, Eloquent akan melaksanakan satu pertanyaan untuk 30 siaran dan kemudian 30 pertanyaan tambahan untuk setiap pengarang (yang bermaksud setiap kali anda memanggil $post ->pengguna dalam kod anda, ia mendapatkan semula perhubungan pengguna).

Penyelesaiannya mudah: gunakan kaedah with() untuk mengurangkan bilangan pertanyaan daripada 31 kepada 2.

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}

Untuk mengelakkan masalah N 1, anda boleh mengkonfigurasi aplikasi untuk membuang pengecualian apabila perhubungan dimuatkan dengan malas. Sekatan ini hanya perlu dikuatkuasakan dalam persekitaran setempat.

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}

Gunakan Mod Tegas Eloquent untuk Mengelak Isu Prestasi dan Ralat

Mod ketat Eloquent ialah alat penyahpepijatan yang berharga. Ia membantu pembangun mengenal pasti isu yang berpotensi semasa pembangunan dengan membuang pengecualian dalam pelbagai senario:

  • Hubungan Lazy Loaded: Lazy loaded boleh membawa kepada isu prestasi, terutamanya apabila berurusan dengan set data yang besar. Keadaan ini berlaku apabila model berkaitan diambil daripada pangkalan data hanya apabila diakses. Dalam mod ketat, pengecualian akan dilemparkan jika perhubungan malas dimuatkan, menggalakkan penggunaan pemuatan bersemangat.
  • Menetapkan Atribut Tidak Boleh Diisi: Sifat $fillable dalam model Eloquent menghalang kelemahan penugasan massa. Jika anda cuba untuk menetapkan atribut yang tidak boleh diisi, pengecualian akan dicetuskan, memastikan pembangun kekal berhati-hati semasa mengendalikan tugasan besar-besaran.
  • Mengakses Atribut Tidak Wujud: Percubaan untuk mengakses atribut yang tidak wujud atau belum diambil daripada pangkalan data boleh membawa kepada tingkah laku atau ralat yang tidak dapat diramalkan. Mod ketat akan memberikan pengecualian dalam kes sedemikian, membantu pembangun mencari dan menyelesaikan isu ini.

Untuk mendayakan mod ketat, tambahkan kod berikut pada kaedah but() AppServiceProvider.php:

php artisan make:request StorePostRequest

Gunakan Kaedah Baharu untuk Menentukan Aksesor dan Mutator

Laravel 9 memperkenalkan cara baharu untuk mengisytiharkan pengakses dan mutator. Begini cara untuk melaksanakannya sekarang:

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}

Sintaks baharu ini membolehkan anda mentakrifkan pengakses dan mutator dengan cara yang lebih ringkas. Anda juga boleh cache nilai yang mahal dari segi pengiraan:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}

Sebaliknya, kaedah sebelumnya kelihatan seperti ini:

php artisan make:controller ShowPostController --invokable

Bertukar kepada sintaks baharu memudahkan kod dan meningkatkan kebolehbacaan.

Gunakan dispatchAfterResponse() untuk Mengendalikan Tugasan Berlangsung Lama

Apabila berurusan dengan tugasan yang memakan masa (seperti menghantar e-mel selepas menyerahkan borang hubungan), anda boleh meningkatkan pengalaman pengguna dengan melengahkan tugas sehingga selepas pelayan membalas kepada pengguna. Di sinilah dispatchAfterResponse() berperanan, membolehkan anda menangguhkan proses yang berjalan lama:

use App\Http\Controllers\ShowPostController;

// Single action controller route
Route::get('/posts/{post}', ShowPostController::class);

Sebagai alternatif, jika anda lebih suka menjadualkan tugas menggunakan fungsi tanpa nama, anda boleh melakukannya seperti ini:

php artisan make:middleware CheckTokens

Dengan menggunakan dispatchAfterResponse(), anda memastikan pengguna menerima respons yang lebih pantas daripada pelayan manakala tugasan latar belakang tidak menjejaskan pengalaman pengguna.

Gunakan Baris Gilir untuk Mengendalikan Tugasan Berlangsung Lama

Apabila memproses tugasan intensif pengiraan (seperti mengendalikan imej yang dimuat naik pengguna), melaksanakan operasi ini dengan segera boleh membebankan pelayan dan membawa kepada pengalaman pengguna yang buruk. Inilah cara untuk menanganinya:

  • Tekanan Pelayan: Menyerahkan tugas pemprosesan masa nyata untuk setiap pengguna boleh mengatasi pelayan.
  • Pengalaman Pengguna: Pengguna terpaksa menunggu, merenung skrin yang dimuatkan, membawa kepada kekecewaan.

Sistem baris gilir Laravel membolehkan anda menangguhkan tugasan yang telah lama dijalankan ini untuk dijalankan secara selari yang teratur atau terkawal, memastikan pelayan kekal responsif dan pengguna tidak perlu menunggu.

Untuk memudahkan pengurusan tugas, pertimbangkan untuk menggunakan Laravel Horizon, yang menyediakan antara muka pengguna untuk memantau dan mengawal tugas baris gilir dengan cekap. Dengan cara ini, anda boleh mengendalikan proses yang kompleks di latar belakang sambil mengekalkan prestasi lancar.

Malas Muat semula Pangkalan Data Sebelum Setiap Ujian

Apabila menguji dalam persekitaran setempat, sebaiknya gunakan pangkalan data baharu setiap kali anda menjalankan ujian. Laravel menyediakan cara yang cekap untuk mengendalikan perkara ini dengan malas menyegarkan pangkalan data sebelum setiap ujian. Ini boleh dicapai menggunakan ciri RefreshDatabase dalam kelas ujian anda. Ini memastikan bahawa pangkalan data berada dalam keadaan bersih setiap kali ujian dijalankan, menghapuskan potensi isu yang disebabkan oleh sisa data.

Menggunakan RefreshDatabase

Gunakan ciri RefreshDatabase dalam kelas ujian anda:

php artisan make:request StorePostRequest

Kelebihan

  • Ketekalan: Memastikan keadaan pangkalan data adalah konsisten setiap kali ujian dijalankan, mengelakkan kegagalan ujian akibat perubahan keadaan.
  • Pengasingan: Setiap ujian berjalan secara bebas, tanpa gangguan, meningkatkan kebolehpercayaan ujian.

Urus Maklumat Sensitif dengan Selamat

Apabila menguruskan maklumat sensitif, memastikan keselamatan adalah penting. Berikut ialah beberapa amalan terbaik:

Gunakan Pembolehubah Persekitaran

Simpan maklumat sensitif (seperti kunci API dan bukti kelayakan pangkalan data) dalam fail .env dan bukannya dalam pangkalan kod.

Gunakan Ciri Penyulitan Laravel

Untuk data yang memerlukan penyulitan, gunakan ciri penyulitan Laravel:

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}

Kemaskini Kekunci secara kerap

Pastikan sentiasa mengemas kini kunci aplikasi (APP_KEY) dan menyulitkan semula data selepas kemas kini.

Kesimpulan

Dengan mengikuti amalan terbaik, petua dan helah ini, anda boleh meningkatkan kualiti dan keselamatan aplikasi Laravel anda dengan ketara. Kaedah ini bukan sahaja akan membantu anda menulis kod yang lebih cekap, tetapi juga memberikan pengalaman yang lebih baik untuk pengguna anda. Meneruskan mempelajari dan menggunakan amalan ini akan membantu anda mencapai kejayaan yang lebih besar dalam pembangunan anda.

Atas ialah kandungan terperinci Amalan, Petua dan Trik Terbaik Laravel untuk 5. 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