首页 文章

Laravel打算使用vue路由器

提问于
浏览
1

我正在开展一个项目,并且在登录后我正在努力重定向到预定的位置 . 问题是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路由?

非常感谢!

2 回答

  • 0

    所以经过一些令人难以忍受的研究后,我发现#之后的所有内容都是由浏览器处理的,这意味着服务器没有看到它,所以你无法在PHP代码中访问它 . 我发现感谢这个帖子:Getting FULL URL with #tag

    我不确定请求的那部分是否甚至没有发送到服务器,但它似乎是这样,甚至对我来说也是如此合乎逻辑 .

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

    domain.com/?request=3413
    

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

  • 2

    您可以通过启用History Mode来删除Vue路由器中URL中的#:

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

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

    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了解更多信息

相关问题