使用 Laravel Vue Inertia 堆栈中的数据重定向路由

Redirect route with data in Laravel Vue Inertia stack

在我的控制器中我有

public function store(Request $request)
    {
        $postData = $this->validate($request, [
            'name' => 'required',
            'status' => 'required | boolean'
        ]);

        Room::create([
            'name' => $postData['name'],
            'active' => $postData['status'],
        ]);

        $message = "Room Added";

        return redirect::route('rooms.index', ['msg' => $message]);
    }

我在道具中使用了'msg'

props:['rooms','errors','msg']

但对于 {{msg}} 给出未定义且没有任何消息。

您正在将 msg 作为参数传递给您的路由,而不是作为参数传递给您的 Inertia::render 调用。由于您正在重定向,您可能希望将消息闪现到会话并在 HandleInertiaRequests 中间件上处理它。查看 example in the documentation.

因此,首先您重定向到 rooms.index 闪烁消息:

return redirect()->route('rooms.index')->with('message', 'My message');

然后,Inertia 请求 rooms.index 路由作为 XHR 请求,在到达您的控制器之前,它通过 HandleInertiaRequests 中间件。

class HandleInertiaRequests extends Middleware
{
    public function share(Request $request)
    {
        return array_merge(parent::share($request), [
            'flash' => [
                'message' => fn () => $request->session()->get('message')
            ],
        ]);
    }
}

现在您可以通过以下方式在您的组件中访问它:

<template>
  <main>
    <header></header>
    <content>
      <div v-if="$page.props.flash.message" class="alert">
        {{ $page.props.flash.message }}
      </div>
      <slot />
    </content>
    <footer></footer>
  </main>
</template>