2017-08-10 80 views
0

我有多個控制器,有多種方法,它們都返回視圖。Laravel重新使用控制器邏輯

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

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

我現在需要創建一個API,它執行許多相同的邏輯,上述方法的,但返回JSON輸出,而不是:

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

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

什麼是完成最好的辦法這不需要將代碼從一個控制器複製並粘貼到另一個控制器上?

我試過把大量邏輯添加到性狀和我的口才車型使用它們,但仍然需要我從控制器複製和粘貼代碼到控制器。我也應該注意到,因爲我有很多很多方法,所以檢查expectsJson()並返回響應是不可行的。

是否已經存儲在一個父類的邏輯,然後創建一個子控制器,以期和使用JSON響應子控制器響應一個好主意?

回答

3

你可以抽象的邏輯業務類別。我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