Author Archives: thietkeweb

React – Bài 1: Học React cơ bản – mở đầu về React

Tạo và lồng các thành phần: React được tạo thành từ các thành phần (components). 1 component là 1 thành phần UI mà có logic và giao diện của nó. Có thể là button, hoặc 1 page. React component là 1 function JS trả về markup: Bạn có thể lồng vào 1 component khác: Viết…

Học Laravel – Bài 39: Laravel Collections

Giới thiệu Collections trong Laravel: Laravel Illuminate\Support\Collection cung cấp cách xử lý thuận tiện với dữ liệu mảng. Ví dụ sau sử dụng helper collect để tạo 1 collection instance từ array, chạy strtoupper lên mỗi element, và xóa những empty element: Tạo Collections: Helper collect trả về 1 instance của Illuminate\Support\Collection: Lưu ý: kết…

Học Laravel – Bài 40: Eloquent: Mutators & Casting

Giới thiệu Mutators & Casting trong Eloquent: Accessors (tiếp cận), mutators (biến đổi) và casting (ép kiểu) cho phép bạn chuyển đổi các thuộc tính (attribute) của Eloquent khi bạn truy xuất hoặc thiết lập (set) chúng trên model. Ví dụ bạn muốn dùng Laravel encrypter để mã hóa 1 giá trị trước khi lưu…

Tkinter Python

Option Sau khi khởi tạo, có thể thay đổi tùy chọn: Hoặc sử dụng method config(): Packer: Trong Tkinter, pack là một trong ba bộ quản lý bố cục chính được sử dụng để đặt các widget trong cửa sổ. pack hoạt động bằng cách sắp xếp các widget dọc theo các cạnh của cửa…

Học Laravel – Bài 38: Cache trong Laravel

Giới thiệu về Cache trong Laravel: Một số tác vụ hoặc quá trình truy xuất dữ liệu có thể ngốn CPU hoặc mất nhiều thời gian để hoàn thành. Trong trường hợp này ta cần cache dữ liệu để có thể truy xuất nhanh hơn ở lần sau. Cache data thông thường lưu trữ trong…

Học Laravel – Bài 36: Events trong Laravel

Giới thiệu Events trong Laravel Laravel event cung cấp cách thực thi pattern observer (người quan sát), cho phép bạn theo dõi và lắng nghe các sự kiện xảy ra trong ứng dụng. Event class được lưu trong thư mục app/Events, còn listener được lưu trong app/Listeners. 1 event có thể có nhiều listener không…

Học Laravel – Bài 24: Error Handling

Mặc định khi start dự án Laravel, error và exception handling được cấu hình sẵn. Class App\Exceptions\Handler là nơi tất cả exception được log và render đến user. Cấu hình: Option debug trong file config/app.php sẽ quyết định mức độ error hiển thị với user. Mặc định ở APP_DEBUG, set up trong file .env. Exception…

Cách sử dụng Git Hub để lưu trữ và đồng bộ dự án lên server

1. Tạo file .gitignore. File này lưu trữ các file và thư mục không up lên git. 2. Lệnh git init để khởi tạo repository. Nếu như các file và thư mục trong .gitignore đã add lên git trước đó (do file được tạo sau khi đã commit). Muốn gỡ các file này: 3. Commit…

Học Laravel – Bài 35: Email Verification

Giới thiệu Email Verification trong Laravel Nhiều ứng dụng yêu cầu xác minh email. Laravel cung cấp sẵn dịch vụ để gửi và xác minh email. Bạn có thể sử dụng Starter kits. Chuẩn bị model: Đầu tiên model User cần implement contract Illuminate\Contracts\Auth\MustVerifyEmail: Một khi interface này được thêm vào model, user mới đăng…

Học Laravel – Bài 33: Authentication

Giới thiệu Authentication trong Laravel: Laravel cung cấp tính năng xác thực và login nhanh chóng, bảo mật và dễ dàng thực thi. Trong core Laravel, xác thực được cấu thành từ “guards” và “providers”. Guards định nghĩa cách user được xác thực trên mỗi request. Ví dụ session guard lưu trữ trạng thái sử…

Học Laravel – Bài 32: Eloquent: Collections

Giới thiệu Eloquent Collections: Tất cả method của Eloquent mà trả về nhiều hơn 1 kết quả sẽ trả về 1 instance của Illuminate\Database\Eloquent\Collection, bao gồm cả kết quả truy vấn thông qua get method hoặc tiếp cận qua quan hệ. Eloquent collection extend Laravel base collection, có nhiều chức năng để làm việc dễ…

Học Laravel – Bài 19: Asset Bundling (Vite)

1. Giới thiệu Vite: Vite là frontend build tool cung cấp môi trường phát triển & đóng gói code cho production. Laravel sử dụng Vite để đóng gói CSS và Javascript cho production. Vite được chọn thay thế Laravel Mix ở các phiên bản mới hơn. 2. Cài đặt và setup ViteJS: Bạn có thể…