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.
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('email_verified_at', '!=', null) ->with(['products' => function ($q) { $q->whereDate('created_at', now()); }]) ->get(); return view('index', ['partners' => $partners]); }
Baik:
<?php public function index() { return view('index', ['partners' => $this->partner->newProducts()]); } class Partner extends Model { public function newProducts() { return $this->where('email_verified_at', '!=', null) ->with(['products' => function ($q) { $q->whereDate('created_at', now()); }]) ->get(); } }
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(['last_login' => now()]); dispatch(new UserCreated($user)); // ... }
Baik:
<?php public function store(Request $request) { $this->userService->create($request); .... } class UserService { public function create($request) { // ... } }
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` = '1' AND `active` = '1' ORDER BY `created_at` DESC
Baik:
<?php Article::has('user.profile')->verified()->latest()->get();
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>
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
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('service')->create($user); if (!$response) { DB::rollback(); return; } // ... DB::commit(); }
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('user.created'); // 'User Successfully Created' $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!