【问题标题】:Use same method for inertia response and json response Laravel Jetstream对惯性响应和 json 响应使用相同的方法 Laravel Jetstream
【发布时间】:2022-01-19 21:06:33
【问题描述】:

我一直在使用 Laravel 支持的 API 和 VueJS 支持的前端,这两个单独的项目用于单页应用程序。现在我想用 Inertia.js 切换到 Laravel Jetstream,因为我可以在单个项目中创建 SPA。这是惯性如何工作的示例-

class UsersController extends Controller

{
    public function index()
    {
        $users = User::active()
            ->orderByName()
            ->get(['id', 'name', 'email']);

        return Inertia::render('Users', [
            'users' => $users
        ]);
    }
}

现在我们可以定义Route::get('users',['UserController::class','index']); 并获取用户列表到localhost:8000/users 并在网页中查看用户列表。

我的问题是,我可以在移动应用中使用相同的控制器和方法进行 API 响应吗?

我必须构建具有相同功能的 Web 应用程序和移动应用程序。对于 web,我需要惯性响应,对于移动应用程序,我需要 json 响应。为了在 Laravel 项目中显示用户列表,我可以使用上面的代码。但是,如何为移动应用程序返回与 JSON 相同的响应,例如 return response($users);?我可以在api.php 中创建 API 路由并制作单独的控制器或方法,或者为 API 或惯性响应添加条件,但我认为可能有更好的方法来使用相同的控制器和方法来处理惯性和 JSON 响应。

【问题讨论】:

    标签: php json laravel inertiajs jetstream


    【解决方案1】:

    是的,您完全可以通过检查请求是否需要 json 响应来做到这一点。像这样的:

    public function index()
    {
        $users = User::active()
            ->orderByName()
            ->get(['id', 'name', 'email']);
    
        if (request()->wantsJson()) {
            return $users;
        }
    
        return Inertia::render('Users', [
            'users' => $users
        ]);
    }
    

    【讨论】:

    • 我确实会选择 expectsJson() 而不是 wantsJson() 来处理 ajax 请求
    • 是的,我们可以做到这一点。但是我们需要为每个方法有条件地返回两个响应。如果我们可以在一个地方进行一些配置,并且所有响应都自动处理,无论是惯性响应还是json响应,那就更好了。
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2021-01-07
    • 2014-04-16
    • 2017-01-12
    • 2015-04-23
    • 2023-03-12
    相关资源
    最近更新 更多