Laravel Session
Laravel Session

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 ပိုဖြစ်ပါတယ်။ 

 

 

This article was updated on July 2, 2020

Ronald Aug

👋လက်ရှိ full-time remote အလုပ်လုပ်၊ Javascript / Node / GraphQL / Laravel တွေရေး၊ music လည်းကြုံရင်ကြုံသလိုလုပ်သူ။ 😅 👋