2017-08-10 6 views
0

私は複数のコントローラを持ち、複数のメソッドを持ち、すべてがビューを返します。Laravel Reusing Controller Logic

class PageController extends Controller { 
    public function index() 
    { 
     // do lots of stuff 
     return view('view.name', $lotsOfStuffArray); 
    } 

    public function list() 
    { 
    //...and so on 
} 

私は今、上記の方法と同じロジックの多くを実行しますが、代わりにJSON出力を返すAPIを作成する必要が、あります達成するための最良の方法は何

class PageApiController extends Controller { 
    public function index() 
    { 
     // do lots of the same stuff 
     return $lotsOfStuffCollection; 
    } 

    public function list() 
    { 
    //...and so on 
} 

をあるコントローラから別のコントローラにコードをコピーアンドペーストする必要はありませんか?

多くのロジックを特色に置き、Eloquentモデルで使用しようとしましたが、コントローラからコントローラにコードをコピー&ペーストする必要があります。私はまた、expectsJson()をチェックし、それに応じて回答を返すことができないことに注意してください。

ロジックを親クラスに格納してから、JSONで応答するビューと子コントローラで応答する子コントローラを作成することをお勧めしますか?

答えて

3

論理をサービスクラスに抽象化することができます。 I have answered a similar question

PageController、PageAPIController、PageServiceがあります。ただ、少し試して、私は受け入れる前に、私は私の環境でこれを実装する方法を模索);

class PageService { 
    public function doStuff() 
    { 
     return $stuff; 
    } 
} 

class PageController extends Controller { 
    public function index() 
    { 
     $service = new PageService(); 
     $stuff = $service->doStuff(); 
     return $stuff; 
    } 

} 

class PageAPIController extends Controller { 
    public function index() 
    { 
     $service = new PageService(); 
     $stuff = $service->doStuff(); 
     return $stuff->toJSON(); 
    } 

    protected function toJSON(){ 
     //You could also abstract that to a service or a trait. 
    } 

} 
+0

@Enstageしてくださいそれはあなたの質問 – Wistar

+1

に答えるならば、私はドリルを知って受け入れ、心配しないでください。 – Enstage

+0

@Enstageいいえ心配しない。 – Wistar