17. Lấy old input (Retrieving old input) (ok)

https://viblo.asia/p/tap-16-request-laravel-aWj534Y8K6m

Đế lấy old input từ request trước, sử dụng method old có trong Illuminate\Http\Request. Phương thức này sẽ lấy flash session đã lưu trữ ở request trước với tham số nhận vào là tên input.

$request->old('username');

Ngoài ra, Laravel còn cung cấp cho ta global helper function old. Với nó, ta có thể lấy bất kỳ flash input nào ngay cả trong Blade template. Nếu flash input không tồn tại, nó sẽ trả về giá trị null.

<input type="text" name="username" value="{{ old('username') }}">

Nói nãy giờ mình nghĩ ta nên thực hành một chút. Chúng ta sẽ sử dụng các route và controller đã đăng ký ở trước. Tại blade view form, mình có HTML form như sau:

<form action="/post" method="POST">
    @csrf

    <p>Username</p>
    <div>
        <input type="text" name="username" value="{{ old('username') }}">
    </div>
    
    <p>Password</p>
    <div>
        <input type="password" name="password">
    </div>

    <br>

    <div>
        <button type="submit">Login</button>
    </div>
</form>

Mục đích mình muốn là sau khi nhấn nút "Login" thì sẽ quay trở lại form này và truyền flash input chỉ cho input "username". Chính vì thế mình chỉ khai báo old ở trong input "username" thôi.

Rồi bây giờ chúng ta qua code xử lý logic trong controller FormController tại hàm post.

public function post(Request $request)
{
    return back()->withInput(
        $request->only('username')
    );
}

Như bạn thấy, mình sử dụng method back để trở về lại trang form, tiếp theo là setup flash input với method withInput, cuối cùng là lọc flash input mà mình muốn. Các bạn thử điền username và password, sau đó nhấn nút "Login", và đây là kết quả:

Input data của "username" đã được giữ lại sau khi trở về trang form, nếu các bạn refresh trang form lần nữa, thì các flash input sẽ biến mất.

Last updated