ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Shared Data
    Laravel/Inertia.js 2021. 9. 21. 21:39
    반응형
    SMALL

    # What?

    - 전역변수처럼 프론트단 어떤 페이지에서나 가져다 쓸 수 있게 공유되는 데이터

     

    # Why?

    - User나 Flash 메시지같은거 공유 필요

     

    # How?

    @HandleInertiaRequests

       public function share(Request $request)
        {
            return array_merge(parent::share($request), [
                "user" => auth()->user(),
                "flash" => function() use ($request){
                    return [
                        "success" => $request->session()->get("success"),
                        "error" => $request->session()->get("error"),
                    ];
                },
                // 기타 공유하고픈 데이터
            ]);
        }

     

    @ ContactController(플래시 메시지 전달 예시)

      public function store(Request $request)
        {
           	...
    
    		// success에 메시지 담기
            return Redirect::back()->with("success", "Contact has been received!");
        }

     

    @ ContactCreate.vue(플래시 메시지 사용 예시)

    ...
    methods: {
            submitContact(){
                this.contactForm.post("/contacts", {
                    preserveScroll: true,
                    onSuccess: (response) => {
                        alert(this.$page.props.flash.success);
    					// 또는 alert(response.props.flash.success);
                        this.contactForm.reset()
                    }
                })
            }
        }

    @ Header.vue(v-if 로그인 안한 유저라면)

    <template>
         <a href="#" class="util" v-if="!$page.props.user">
                        <span class="icon-wrap">
                            <img src="/img/user-white.png" alt="" class="icon">
                        </span>
    
                        LOGIN
                    </a>
    </template>
    LIST

    댓글

Designed by Tistory.