Laravel打算使用vue路由器

时间:2017-08-10 08:32:12

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

我正在开展一个项目,并且在登录后我正在努力重定向到预定的位置。 问题是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 :(得分:2)

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

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

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

domain.com/?request=3413

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

答案 1 :(得分:0)

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

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

您需要将所有请求定向到应用程序所在的位置。如果您的后端是Laravel,则可以在route / 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以获得更多信息