【问题标题】:Laravel's intended() with vue routerLaravel 的预期()与 vue 路由器
【发布时间】:2018-01-18 09:21:03
【问题描述】:

我正在处理一个项目,并且在登录后正在努力重定向到预期的位置。 问题是 Laravel 不包含 Vues 路由(#/... 之后的任何内容),所以它总是只将我重定向到 'domain.com/'

我仅将 laravel 路由用于“登录”“注销”和“/”,应用程序的其余部分是使用 vue 路由的单页。

应用程序的用户在需要采取行动时会收到通知电子邮件。这些电子邮件包含指向需要其操作的请求的链接(例如 domain.com/#/request/3413)。当然,他们需要登录才能访问,所以他们会被 laravel 重定向到登录页面(domain.com/login#/request/3413)

成功登录后,我尝试使用重定向它们

return redirect()->intended('/');

但它会将它们重定向到“domain.com/”而不是“domain.com/#/request/3413”

有没有办法让 laravel 在重定向中包含 vues 路由?

非常感谢!

【问题讨论】:

    标签: vue.js vuejs2 laravel-5.4 laravel-routing vue-router


    【解决方案1】:

    所以经过一些令人痛苦的研究后,我发现 # 之后的任何内容都由浏览器处理,这意味着服务器看不到它,因此您无法在 PHP 代码中访问它。我发现感谢这个线程:Getting FULL URL with #tag

    我不确定请求的那部分是否甚至没有发送到服务器,但它看起来是这样的,而且对我来说甚至是非常合乎逻辑的。

    所以为了解决这个问题,我将通过电子邮件发送给用户的链接更改为类似这样的内容

    domain.com/?request=3413
    

    这样我可以在我的PHP代码中访问它,并在成功登录后将重定向链接放在一起。

    【讨论】:

    • 您介意分享一下您是如何通过代码示例将所有这些设置在一起的吗?我正在寻找同样的东西
    【解决方案2】:

    您可以通过启用History Mode 来删除 Vue Router 中 URL 中的 #,如下所示:

    const router = new VueRouter({
      mode: 'history',
      routes: [...]
    })
    

    您需要将所有请求定向到应用所在的位置。如果你的后端是 Laravel,你可以在你的 routes/web.php 文件中定义一个包罗万象的路由

    Route::get('/{any}', 'SpaController@index')->where('any', '.*');
    

    对此需要注意的是,服务器将不再为未找到的路径返回 404,因此如果未找到路径,您将必须创建一个 NotFoundComponent 以显示在您的 Vue 应用程序上。

    const router = new VueRouter({
      mode: 'history',
      routes: [
        { path: '*', component: NotFoundComponent }
      ]
    })
    

    阅读Vue Router History Mode Documentation了解更多信息

    【讨论】:

    • 谢谢 :D 我现在已经学会了这一点,但我希望你的回答能帮助其他人 :D 我应该自己把它放在这里 :D
    猜你喜欢
    • 2021-02-08
    • 2020-12-25
    • 2020-07-28
    • 2017-02-04
    • 2017-03-28
    • 2019-11-04
    • 1970-01-01
    • 2022-10-30
    • 1970-01-01
    相关资源
    最近更新 更多