gpt4 book ai didi

laravel - 从同一个 Controller 管理 View 和 api

转载 作者:行者123 更新时间:2023-12-02 07:20:52 25 4
gpt4 key购买 nike

我的应用程序有一个问题,即“混合”,我所说的“混合” Controller 必须同时管理 View 和 API。

所以,基本上,对于每个 Controller ,我必须检查:

if $request->wantsJson(){
... // Client rendering using Angular, return json
}else{
// Server rendering Using blade, return view
}

我不喜欢在每个 Controller 方法中都有条件。

我也不希望有一个包含我所有 Controller 副本的 API 文件夹,那样会有很多重复的代码。

我应该怎么做?

最佳答案

我建议创建一个单独的类来处理输出,例如:class ResultOutput 方法 output

因此,在您的 Controller 中,当您准备好输出数据时,只需创建一个 ResultOutput 类的新实例,并使用相关数据调用方法 output

在 ResultOutput 类中,注入(inject) Request 对象,这样就可以根据上述逻辑确定输出的方法。

例如:在你的 Controller 中:

return (new ResultOutput())->output($data);

在 ResultOutput 类中:

class ResultOutput()
{
private $type;

public __construct(Request $request) {
$this->output = 'view';
if ($request->wantsJson()) {
$this->output = 'json';
}
}


public method output($data) {
if ($this->type =='view') {
// return the view with data
} else {
// return the json output
}
}

}

这样,如果您需要引入新的输出方法(例如:xml),您可以在不更改所有 Controller 的情况下进行。

关于laravel - 从同一个 Controller 管理 View 和 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46439917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com