## Hooks
Hooks là những hành động trước hoặc sau các sự kiện tương tác với databases
(`Lifecycle Events`)
Sử dụng model hooks cũng sẽ giúp code sạch đẹp hơn
Ví dụ:
Quay lại file app/Models/User.js
có thể thấy ta đã hook vào ngay trước khi lưu thông tin user thì password sẽ được mã hóa.
<!-->
class User extends Model {
static boot () {
super.boot()
this.addHook('beforeSave', async (userInstance) => {
if (userInstance.dirty.password) {
userInstance.password = await Hash.make(userInstance.password)
}
})
<-->
1. Ngoài việc viết các model hooks ở method boot() ta cũng có thể tạo file hook riêng
và đưa code xử lý vào file này
> adonis make:hook User
==> Output: app/Models/Hooks/UserHook.js
Mở file app/Models/Hooks/UserHook.js và sửa lại như bên dưới
<!-->
'use strict'
/** @type {import('@adonisjs/framework/src/Hash')} */
const Hash = use('Hash')
const UserHook = exports = module.exports = {}
UserHook.hashPassword = async (user) => {
user.password = await Hash.make(user.password)
}
<-->
Sau đó ở file app/Models/User.js sửa lại
<!-->
class User extends Model {
static boot () {
super.boot()
this.addHook('beforeSave', 'UserHook.hashPassword')
}
}
<-->
## Aborting Database Operations
Ngoài ra cũng có thể viết các bắt lỗi giá trị nhập ở đây
File app/Models/Hooks/UserHook.js
<!-->
UserHook.validate = async (user) => {
if (!user.username) {
throw new Error('Username is required')
}
}
<-->
## Lifecycle Events
Event Description
beforeCreate Before creating a new record.
afterCreate After a new record is created.
beforeUpdate Before updating a record.
afterUpdate After a record has been updated.
beforeSave Before creating or updating a new record.
afterSave After a new record has been created or updated.
beforeDelete Before removing a record.
afterDelete After a record is removed.
afterFind After a single record is fetched from the database.
afterFetch After the fetch method is executed.
afterPaginate After the paginate method is executed.
The hook method receives two arguments:
an array of model instances and the pagination metadata.
Không có nhận xét nào:
Đăng nhận xét