2017-09-27 78 views
0

我的應用程序出現問題,即「混合」,我的意思是「混合」控制器必須同時管理這兩個視圖API。管理來自同一個控制器的視圖和API

所以,基本上,每個控制器,我必須檢查:

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

我不喜歡這樣的事實,以在每一個控制器方法的條件。

我也不希望有一個API文件夾與我的所有控制器的副本,會有很多重複的代碼。

我應該怎麼做?

+0

使您的代碼更模塊化,這可能會幫助您複製代碼 –

回答

2

我建議創建一個單獨的類來處理輸出ex:class ResultOutput與方法output

因此,在您的控制器中,當您準備好輸出數據時,只需創建一個ResultOutput類的新實例,並調用帶有相關數據的方法output

在ResultOutput類中,注入Request對象,以便您可以根據上述邏輯確定輸出的方法。

例如:在你的控制器:

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),你可以做到這一點而無需更改所有控制器。

+0

另一種方式將擴展視圖類和修改make方法 – madalinivascu

相關問題