2017-09-27 2 views
0

「ハイブリッド」という私のアプリに問題があります。「ハイブリッド」コントローラは両方のビューとAPIを管理する必要があります。同じコントローラからのビューとAPIの管理

ので、基本的には、各コントローラのため、私がチェックする必要があります。

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

を私はすべてのコントローラメソッドで、条件を持っているという事実が好きではありません。

また、私のすべてのコントローラのコピーを持つAPIフォルダを持っていないと、重複したコードがたくさんあります。

どうすればよいですか?

+0

コードをよりモジュラ化すると、コードを複製するのに役立ちます –

答えて

2

出力を処理する別のクラスを作成することをお勧めします。class ResultOutputメソッドでは、outputです。

したがって、データを出力する準備ができたら、ResultOutputクラスの新しいインスタンスを作成し、メソッドoutputを関連データとともに呼び出します。

ResultOutputクラスでは、上記のロジックに基づいて出力のメソッドを決定できるように、Requestオブジェクトを挿入します。

例:あなたは新しい出力方法を導入する必要がある場合は、このようにして

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 
     } 
    } 

} 

、お使いのコントローラで:

ResultOutputクラスで
return (new ResultOutput())->output($data); 

(例:XML)を、あなたがそれを行うことができますすべてのコントローラを変更する必要はありません。

+0

別の方法は、ビュークラスを拡張してmakeメソッドを変更することです – madalinivascu

関連する問題