Chào các bạn trong bài trước mình đã chia sẽ cho các bạn những lời khuyên để học nhanh Laravel rồi phải không nào.
Qua nhiều lần khảo sát cũng như trao đổi với nhiều bạn làm về Laravel mình nhận thấy đa phần các bạn đều viết sai cách. Sai ở đây mình không nói về Logic mà mình nói về cách viết trong OOP (Hướng đối tượng).
Hôm nay mình viết bài này để chia sẽ cho các bạn code Laravel sao cho đúng (ý kiến cá nhân mình ^^) nhằm tăng performance website cũng như tính thẳm mỹ trong code.
Nói đến hướng đối tượng thì không riêng gì Laravel mà các Framework cung như thế. MVC là gì mình không cần phải nói ai cũng biết phải không nào ?. Nhưng liệu chúng ta có hiểu được mỗi thành phần trong đó xử lý những gì không nào. Đây là cái mình sẽ nói chính trong bài viết này.
1. Sử Dụng MVC theo đúng nghĩa !
Với Models chúng ta nên viết function xử lý trong chính Class bạn muốn lấy dử liệu. Sau khi có fucntion mong muốn Controller chỉ cần đều hướng tới Models gọi function can thiết và trả về dữ liệu. Các bạn hãy xem qua ví dụ sau.
//Models Class User extends Model { protected $table = 'users'; public function getListUser() { return self::get(); } } //Controllers use AppUser; Class UserController extends Controller { function __construct(User $user) { } public function index() { return view('viewName', compact('listUser')); } }
Khá là đơn giản phải không nào. Trong ví vụ trên tôi có dùng __construct trong việc khởi tạo models. Nhiều bạn vẫn thường dùng New ModelClass đều này không sai nhưng việc cứ lặp đi lặp lại mỗi function bạn phải gọi new Model nhin code không đẹp cho lắm. Thì __construct sẽ giúp các bạn trong việc này.
2. Request hãy để nó làm việc theo đúng những gì nó có !
Cách giải quyết hợp lý nhất là ta nên xây dựng một nơi để quản lý vấn đề này bằng cách tạo một Request riêng. Với Laravel chúng đã tích hợp sẵn lệnh tạo một Request thông qua Artisan Console các bạn có thể thực hiện như sau:
php artisan make:request ten_request
Đây là nội dung Request ta vừa tạo. Tôi đã tạo một file Request có tên là UserRequest:
//app/Http/Requests/UserRequest; namespace AppHttpRequests; use AppHttpRequestsRequest; class UserRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // ]; } }
/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ ]; }
/** * Get the validation attributes that apply to the request. * * @return array */ public function attributes() { return [ ]; } /** * Get the validation custom message that apply to the request. * * @return array */ public function customMessages() { return [ ]; }
Vậy sử dụng Request này như thế nào. Đơn giản thôi tại controller ban muốn sử dụng các bạn hãy gọi NameSpace của nó ra để khái báo rằng bạn sẽ sử dụng nó.
use AppHttpRequestsUserRequest; Class UserController extends Controller { // }
Tiếp theo chúng ta cần làm gì. Truyền tham chiếu nó vào action bạn cần xử lý Request. Ví vụ tôi có action đăng ký người dùng như sau:
use AppHttpRequestsUserRequest; Class UserController extends Controller { // public function userRegister(UserRequest $request) { // your code here. } }
Ở function userRegister các bạn sẽ không cần phải gọi Validator rồi make rules các kiểu nữa vì UserRequest đã thay bạn làm cả rồi.^^
3. Tạo Helper hãy vận dụng OOP thông qua Namespace
Nhiều bạn mắc lỗi nho nhỏ khi tạo thư viên helper cua mình nhằm giúp xử lý các tác vụ nhỏ khi cần thiết nhu xử lý chuỗi, mảng ,…Mọi người thường xử lý theo dạng php thuần trong khi các bạn đang viết OOP.
funtion getString($string) { return $string; }
Đây cũng là một cách. nhưng thật sự không tối ưu khi chỉnh sửa và thường gặp lổi với autoload khi các bạn thêm vào chúng tôi autoload. ý kiến cá nhân của mình các bạn nên tận dụng cái mà OOP đang làm cách mà Laravel đang sử dụng. mọi thứ đều viết với dạng các lớp , thuộc tính và phương thức.
namespace AppHelpers; class Helper { public function getString($string) { return $string } }
Việc sử dụng cũng khá dẽ dàng các bạn chỉ cần khai báo namespace tại controller và gọi phương thức của nó ra.
use AppHelpersHelper; Class UserController extends Controller { function __construct(Helper $helper) { } public function userRegister(UserRequest $request) { // your code here. } }
Lời kết:
Nguồn: Techtalk via codevivu