2016-12-04 92 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来共享方法,但是,特征更常用于描述特征和类型。

您应该创建一个实用程序类,或者如果需要,可以考虑使用抽象控制器类。