2016-12-04 98 views
0

我正在爲玩家編寫系統,我使用Laravel freamwork(僅供學習),並且我有更多的開發人員的經驗問題。我有一個函數可以返回一些數據來查看。我在3個控制器中使用這個功能(但是我將這個功能複製並粘貼到每個控制器文件中),我可以將這個功能放在一個文件中,然後在這3個控制器中使用它嗎?如何在diffrent控制器中使用相同的功能而無需複製和過去?Laravel乾淨的代碼

回答

1

可以創建基本控制器:

<?php 

namespace App\Http\Controllers; 

class BaseController 
{ 
    protected $playersRepository; 

    public function __construct(PlayersRepository $playersRepository) 
    { 
     $this->playersRepository = $playersRepository; 
    } 
} 

其是注射了存儲庫對象:

<?php 

namespace App\Http\Controllers; 

class PlayersRepository 
{ 
    public function getPlayers() 
    { 
     return Player::all(); 
    } 
} 

其中有一個常用的方法,可以在一個以上的擴展控制器用來:

遊戲

<?php 

namespace App\Http\Controllers; 

class Games extends BaseController 
{ 
    public function index() 
    { 
     return view('games', ['players' => $this->playersRepository->getPlayers()]); 
    } 
} 

匹配

<?php 

namespace App\Http\Controllers; 

class Matches extends BaseController 
{ 
    public function show() 
    { 
     return view('matches', [ 
      'matches' => $matches, 

      'players' => $this->playersRepository->getPlayers() 
     ]); 
    } 
} 
+0

感謝解釋和代碼。 ! :) –

0

創建模塊(util)或覆蓋主控制器類。

2

您也可以使用Traits來共享方法,但是,特徵更常用於描述特徵和類型。

您應該創建一個實用程序類,或者如果需要,可以考慮使用抽象控制器類。