我的应用程序存在问题,即" hybrid",我的意思是" hybrid"控制器必须管理两个视图和API。
所以,基本上,对于每个控制器,我必须检查:
if $request->wantsJson(){
... // Client rendering using Angular, return json
}else{
// Server rendering Using blade, return view
}
我不喜欢在每种控制器方法中都有条件的事实。
我也不想拥有一个带有我所有控制器副本的API文件夹,会有很多重复的代码。
我该怎么办?
答案 0 :(得分:5)
我建议使用方法class ResultOutput
创建一个单独的类来处理输出ex:output
。
因此,在您的控制器中,当您准备输出数据时,只需创建一个ResultOutput类的新实例,并使用相关数据调用方法output
。
在ResultOutput类中,注入Request对象,以便根据上述逻辑确定输出方法。
Ex:在您的控制器中:
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),您可以在不更改所有控制器的情况下执行此操作。