2016-12-04 4 views
0

Я пишу систему для игроков, где я использую freelwork Laravel (только для изучения), и у меня есть вопрос для большего опыта разработчика. У меня есть одна функция, которая возвращает мне некоторые данные для просмотра. Я использую эту функцию в 3 контроллерах (но я копирую и вставляю эту функцию в каждый файл Controller), и могу ли я просто поместить эту функцию в один файл, а затем использовать ее в этих трех контроллерах? Как я могу использовать одну и ту же функцию в другом контроллере без копирования и в прошлом?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

Создать модуль (использовать) или переопределить основной класс контроллера.

2

Вы также можете использовать Traits для совместного использования методов, однако характеристики чаще всего описывают характеристики и типы.

Вы должны создать класс утилиты или использовать класс абстрактного контроллера, если это необходимо.

Смежные вопросы