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

Posted

技术标签:

【中文标题】使用 Laravel Vue Inertia 堆栈中的数据重定向路由【英文标题】:Redirect route with data in Laravel Vue Inertia stack 【发布时间】:2021-11-02 09:09:03 【问题描述】:

在我的控制器中,我有

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]);
    

我在道具中使用了“味精”

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

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

【问题讨论】:

【参考方案1】:

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

所以,首先你重定向到rooms.index 闪烁消息:

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

然后,Inertia 以 XHR 请求的形式请求 rooms.index 路由,并且在到达您的 Controller 之前,它会通过 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>

【讨论】:

谢谢。我已经接受了来自 rooms.index 的 'msg' 和 Response $request 并分配给了一个道具。比如 $msg = $request->session()->get('msg'); 你的回答让我免于发疯。谢谢

以上是关于使用 Laravel Vue Inertia 堆栈中的数据重定向路由的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel Inertia Vue 中初始化服务器端多列排序

Vue3/Inertia 无法解析组件

使用 Vue.Js / Inertia.js 和 Laravel 对结果进行分页

如何使用 Laravel 8、Inertia.js 和 Vue3 定义全局变量?

为 Vue 使用 2 个不同的刀片根模板,以及 Laravel 8 和 Inertia?

在 Inertia.js Vue 文件中访问 Laravel 的 .env 变量