
Laravel session flash method ရဲ့ message အကြိမ်ကြိမ်ပေါ်တဲ့ ပြဿနာ
ပုံမှန်အားဖြင့် ကျနော်တို့ Laravel ရဲ့ session ကနေ validation error တွေဖမ်းကြရင် controller ထဲမှာဒီလိုရေးပြီး
$request->session()->flash("success","successfully update")
return view('layout.index');
blade ထဲမှာ အောက်ကအတိုင်းခေါ်သုံးတတ်ကြပါတယ်။
@if(Session::has('success'))
{{ Session::get('success') }}
@endif
ဒီနေရာမှာ အဓိကပြဿနာက flash message ကြောင့်မဟုတ်ပဲ ကျနော်တို့ controller ထဲမှာ return view()
ဆိုပြီး return ပြန်ထားတာပါ။ ဘာကြောင့်လဲဆိုတော့
Laravel doc အရ flash လုပ်လိုက်တဲ့ session က request ၂ ခုအတောအတွင်းထဲမှာသိမ်းထားတာဖြစ်ပါတယ်။ ဆိုလိုတာက နောက် request တစ်ခုမရှိမချင်း အဲဒီ session data ကိုဆက်သိမ်းထားတာဖြစ်ပါတယ်။
ဒီနေရာမှာ return view()
မရေးပဲ return route()
နဲ့သွားရင် flash message ကအကြိမ်ကြိမ်ထပ်မပေါ်တော့ပါဘူး။ ဘာကြောင့်လဲဆိုတော့ view() က နောက် request တစ်ခုမဟုတ်ပဲ view ကို render လုပ်တာကြောင့် session data ကိုဆက်သိမ်းနေတာပဲဖြစ်ပါတယ်။ route() ကကျတော့ နောက်ထပ် request တစ်ခုဖြစ်တဲ့အတွက် session data ကိုဖျက်ပစ်တာကြောင့်ပဲဖြစ်ပါတယ်။
ဒါက ဖြေရှင်းနည်းတစ်ခုဆိုပေမယ့် တခါတလေမှာ return view()
ကိုမဖြစ်မနေသုံးရတဲ့အခါတွေရှိပါတယ်။ ဒီတော့ return view()
ကိုသုံးပြီး flash message ကိုတစ်ကြိမ်တည်းပေါ်ချင်တယ်ဆိုရင်တော့Session::pull()
ကိုသုံးနိုင်ပါတယ်
Session::pull()
ရဲ့လုပ်ဆောင်ချက်က Session data ကိုဆွဲထုတ်လိုက်တာဖြစ်ပါတယ်။ နောက်ထပ်တစ်ခါခေါ်လို့မရအောင် တခါတည်းဖျက်ပစ်လိုက်တာမျိုးဖြစ်ပါတယ်။
ဒီအောက်က ဥပမာမှာ get အစား pull ကိုသုံးလိုက်တာဖြစ်ပါတယ်။
@if(Session::has('success'))
{{ Session::pull('success') }}
@endif
ဒီနည်းနဲ့ဆို Controller ထဲမှာ return view()
နဲ့ပဲရေးရေး return route()
နဲ့ပဲရေးရေး တစ်ခါတည်းပဲသုံးတာဖြစ်တဲ့အတွက် safe ပိုဖြစ်ပါတယ်။