Thử debug với Laravel Tinker

Ngoài cách sử dụng dd() trong code ra thì chúng ta còn có một cách debug với terminal trông ngầu lòi hơn =)))

Sử dụng

Bắt đầu bằng command php artisan tinker tại Terminal.

❯ php artisan tinker
Psy Shell v0.10.9 (PHP 8.0.12 — cli) by Justin Hileman
>>> 

Bắt đầu với Tinker

Giả sử bạn muốn tìm một user có id = 1 trong bảng user để phục vụ debug, tương tự như chúng ta thường debug, chỉ cần $user = User::find(1) tại terminal. Tinker sẽ tự hiểu User sẽ được set alias đến model User có namespace là App\Models\User

=> App\Models\User {#3557
     id: 1,
     name: "duongbx",
     email: "duongbx@abc.com",
     email_verified_at: null,
     #password: "000",
     #remember_token: null,
     created_at: null,
     updated_at: null,
   }
>>> 

Nhìn cũng giống như chúng ta dùng dd(User::find(1)) trong code, nhưng biến $user lúc này đã được lưu tại session của Tinker, lúc này chúng ta có thể sử dụng biến $user để lấy ra attribute là email và name như dưới đây.

>>> $user->email
=> "duongbx@abc.com"
>>> $user->name
=> "duongbx"
>>> 

Tinker cũng cho phép chúng ta tuỳ biến giống như trong code

>>> $user->name = "duongbx dep trai"
=> "duongbx dep trai"
>>> $user
=> App\Models\User {#3557
     id: 1,
     name: "duongbx dep trai",
     email: "duongbx@abc.com",
     email_verified_at: null,
     #password: "000",
     #remember_token: null,
     created_at: null,
     updated_at: null,
   }
>>> 

Trên đây nhìn thì thấy đẹp trai rồi nhưng thực chất biến $user chỉ bị tác động trong session của Tinker thôi chứ chưa ảnh hưởng gì tới DB cả. Nếu muốn lưu vào database chỉ cần thêm dòng $user->save() là được.

Test thử function

Một function đơn giản:

>>> function sayHello($name) {                                                                                                                              return "hello $name";                                                                                                                               }
>>> sayHello('duongbx dep trai')
=> "hello duongbx dep trai"
>>> 

Hoặc:

>>> $collection = collect([0, 1, 2, 3, 4, 5])
=> Illuminate\Support\Collection {#3577
     all: [
       0,
       1,
       2,
       3,
       4,
       5,
     ],
   }
>>> $collection->count()
=> 6
>>> 

Kết

Hy vọng qua bài viết này của mình mọi người sẽ có thêm một cách debug khiến cho quá trình fix bug dễ thở hơn.