Thứ Ba, 13 tháng 4, 2021

Session trong AdonisJS




## Setup
> adonis install @adonisjs/session

- Đăng kí sử dụng ở start/app.js
const providers = [
'@adonisjs/session/providers/SessionProvider'
]

- Đăng kí middleware ở file start/kernel.js
const globalMiddleware = [
'Adonis/Middleware/Session'
]

## Config
Cấu hình session chi tiết có thể xem ở file `config/session.js`
Có thể cấu hình SESSION_DRIVER ở file env
driver: Env.get('SESSION_DRIVER', 'cookie'),
theo mặc định thì session lưu vào cookie.

Có thể chọn lưu session vào cookie, file hoặc redis.
Nếu muốn cấu hình lưu ở Redis thì xem thêm hướng dẫn https://adonisjs.com/docs/4.1/redis

## Cơ bản
<!-->
Route.get('/', ({ session, response }) => {
session.put('username', 'virk') // lưu giá trị
response.redirect('/username')
})

Route.get('/username', ({ session }) => {
return session.get('username') // lấy ra giá trị đã lưu ở session . 'virk'
})
-->

## Các hàm sử dụng với Session
1. Lưu giá trị với `put(key, value)`
> session.put('username', 'virk')

2. Lấy giá trị với `get(key, [defaultValue])`
> session.get('username')
> session.get('username', 'defaultName')

3. Lấy tất cả giá trị đã lưu vào session
> session.all()

4. Tăng giá trị với `increment(key, [steps])`
> session.increment('counter')
> session.increment('counter', 5) // counter = counter + 5

Chú ý: cần đảm bảo counter là một số.

5. Giảm giá trị với `decrement(key, [steps])`
> session.decrement('counter')
> session.decrement('counter', 2) // counter = counter - 2

6. Xóa đi một cặp key/value
> session.forget('username')

7. Lấy kết quả rồi xóa đi cặp key/value đó vơi `pull(key, [defaultValue])`
const username = session.pull('username') // returns username
session.get('username') // null

8. Xóa tất cả các giá trị đã lưu vào session
> session.clear()


## Hiển thị các thông báo với Flash messages
1. HTML form example
<!-->
<form method="POST" action="/users">
{{ csrfField() }}
<input type="text" name="username" value="{{ old('username', '') }}" />
{{ getErrorFor('username') }}
<button type="submit">Submit</button>
</form>
-->

File app/routes.js
<!-->
const { validate } = use('Validator')

Route.post('users', ({ request, session, response }) => {
const rules = { username: 'required' }
const validation = await validate(request.all(), rules)

if (validation.fails()) {
session.withErrors(validation.messages()).flashAll()
return response.redirect('back')
}

return 'Validation passed'
})
-->

2. Flash methods
a) Lấy tất cả flash data
> session.flashAll()

b) Chỉ lấy ra một số fields
> session.flashOnly(['username', 'email'])

c) Lấy ra hết ngoại trừ một số fields
> session.flashExcept(['password', 'csrf_token'])

d) Flash với một array errors
session
.withErrors([{ field: 'username', message: 'Error message' }])
.flashAll()

e) Flash một object bổ sung
> session.flash({ notification: 'You have been redirected back' })

3. View helpers
a) Giữ lại giá trị cũ ở một form element khi có lỗi xảy ra
> session.flashOnly(['username'])
> <input type="text" name="username" value="{{ old('username', '') }}" />

b) Hiển thị error message
session
.withErrors({ username: 'Username is required' })
.flashAll()
==>
@if(hasErrorFor('username'))
// display error
// getErrorFor('username')
@endif

c) Flash message
> flashMessage(key, defaultValue)

Ví dụ:
<!-->
session.flash({ notification: 'Update successful!' })
==>
@if(flashMessage('notification'))
<span>{{ flashMessage('notification') }}</span>
@endif
-->

## Kiểm soát đăng ký lại session nếu có lỗi LogicalException
<!-->
const GE = require('@adonisjs/generic-exceptions')

class MyCustomException extends GE.LogicalException {
handle (error, { session }) {
await session.commit()
// handle exception
}
}
-->



Không có nhận xét nào:

Đăng nhận xét

Học lập trình web căn bản với PHP

Bài 1: Các kiến thức căn bản Part 1:  https://jimmyvan88.blogspot.com/2012/05/can-ban-lap-trinh-web-voi-php-bai-1-cac.html Part 2:  https://...