【问题标题】:Proper way to route vue/ajax requests in laravel?在 laravel 中路由 vue/ajax 请求的正确方法?
【发布时间】:2019-04-07 19:11:11
【问题描述】:

我是 laravel 的新手,正在制作一个无需 javascript 即可运行的网络服务(如果用户禁用了它或其他什么)。

但如果不刷新整个页面就能够执行某些操作,那将是更好的用户体验。我想说,无需重新加载页面即可发送表单,或刷新通知。

我能想到的选项是:

1) 将 ajax 发送到与纯 html 表单相同的路由,但带有一个额外的变量,并在检测到该变量时让我的 laravel 以 json 响应

2) 使用 API 路由?这会检测到当前登录的用户吗?

3) 为所有 ajax 创建新路由,即使它们的功能与我当前的路由相同(除了返回视图)

另外,CSRF 令牌是否连续工作多次,或者我是否需要禁用它才能在不刷新页面的情况下连续处理多个 ajax 表单帖子?

【问题讨论】:

  • 正确的做法是使用 API 路由。只要您的middlewareKernal.php 配置正确,它就会检测到登录用户。确保您的 \App\Http\Middleware\EncryptCookies::class,\Illuminate\Session\Middleware\StartSession::class, 在您的 api middlewareGroups

标签: php ajax laravel vue.js


【解决方案1】:

我建议保持路由分开,既可以防止奇怪的缓存错误,也可以让您在代码随时间变化时保持理智。

Laravel 开箱即用,允许您在 routes/web.php 中定义 web 路由,在 routes/api.php 中定义 api 路由。默认情况下,在您的 api.php 文件中定义的路由将在 /api/* 可用。以这种方式管理更改应用程序要容易得多,而不是试图让您的控制器同时执行视图和 api 响应。

使用 Laravel Passport,当将 Laravel\Passport\Http\Middleware\CreateFreshApiToken 添加到 web 中间件组时,您的 API 路由可以通过 auth:api 中间件检测当前登录的用户。 https://laravel.com/docs/5.7/passport#consuming-your-api-with-javascript

管理重复的控制器(一个用于 web,一个用于 api)的一种简单方法是将 Api 控制器放在它们自己的命名空间中,php artisan make:controller Api/FooController。您甚至可以通过编辑RouteServiceProvider.php 来设置您的 Api 路由以默认在此命名空间中查找控制器。

【讨论】:

    猜你喜欢
    • 2017-04-21
    • 2015-03-24
    • 2015-11-08
    • 2015-02-25
    • 2016-01-25
    • 2017-10-09
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多