我是laravel的新手,它使Web服务可以在不使用javascript的情况下运行(如果用户禁用了它或其他功能。)
但是能够执行某些操作而不刷新整个页面将是更好的用户体验。我想说的是,发送表单而不重新加载页面或刷新通知。
我能想到的选择是:
1)将ajax发送到与纯html表单相同的路由,但带有一个额外的变量,并在检测到该变量时让我的laravel用json响应
2)使用API路由?这会检测到当前登录的用户吗?
3)为所有ajax都创建新路线,即使它们的功能与我当前的路线相同(除了返回视图外)
此外,CSRF令牌是否可以连续工作多次,还是需要禁用它才能在不刷新页面的情况下连续处理多个ajax表单帖子?
答案 0 :(得分:2)
我建议将路由分开,以防止出现奇怪的缓存错误,并且为了使代码随时间变化而保持您的理智。
Laravel开箱即用,可让您在routes/web.php
中定义Web路由,在routes/api.php
中定义api路由。默认情况下,在api.php文件中定义的路由将在/api/*
可用。用这种方法管理更改应用程序要容易得多,而不是试图让控制器同时执行视图和api响应。
使用Laravel Passport,将auth:api
添加到Laravel\Passport\Http\Middleware\CreateFreshApiToken
中间件组中后,您的API路由就可以通过web
中间件来检测当前登录的用户。
https://laravel.com/docs/5.7/passport#consuming-your-api-with-javascript
一种管理重复控制器的简单方法(一个用于Web,一个用于api)是使用php artisan make:controller Api/FooController
将Api控制器置于其自己的命名空间中。您甚至可以通过编辑RouteServiceProvider.php
来设置Api路由,以默认情况下在此名称空间中查找控制器。