Как я должен структурировать несколько перенаправлений и возвращать представления в одной функции контроллера? - PullRequest
1 голос
/ 19 октября 2019

Немного предыстории того, что я сейчас делаю и пытаюсь достичь.

Я решил следовать этому шаблону для разработки, так как мои контроллеры становятся смехотворно огромными,В результате я теперь создал репозитории и сервисы, которые обрабатывают всю мою логику. Мои контроллеры теперь очень легкие.

Почему? Потому что сейчас я полностью фокусируюсь на функциональности сайта и использую базовый веб-интерфейс начальной загрузки. Позже, когда я начну изучать React / Vue, я могу легко использовать те же сервисы и репозитории для создания своего уровня API и медленно разрабатывать отдельный интерфейс.

Мне удалось перенести большую часть своей функциональностиВ мои услуги, однако, один аспект моего проекта оказывается проблематичным, и я не знаю, как лучше всего подойти к этому для рефакторинга. Позвольте мне начать с примера функции:

public function index()
{
    //Returns all of the clubs a user is a part of
    $userClubs = auth()->user()->clubs;

    //Returns if a user is a chairman or not
    $chairman  = auth()->user()->chairman;

    switch ($userClubs->count()) {

        //If a user is part of NO clubs but is a chairman, redirect to /chairman, else, redirect to /
        case 0:
            return ($chairman == 1 ? redirect('/chairman') : redirect('/'));
            break;

        //If a user is part of 1 club and IS a chairman, show the select-club view, else take the user directly to the single club they are a part of
        case 1:
            if ($chairman == 1){
                return view('club.select-club', ['clubs' => $userClubs]);
            }
            if ($userClubs->first()->pivot->verified == 1){
                return redirect('/club/'.$userClubs->first()->url_extension);
            }
            return redirect('/user')->with('message', 'Your account for '. $userClubs->first()->club_name .' has not been verified. Please try again later.');
            break;

        //If a user is part of multiple clubs, show the select-club view
        default:
            return view('club.select-club', ['clubs' => $userClubs]);
            break;
    }
}

Я добавил встроенные комментарии к приведенному выше блоку кода.

Как я могу перенести эту функцию из моего контроллера в мои службы? Любые идеи будут с благодарностью.

Спасибо.

1 Ответ

0 голосов
/ 19 октября 2019

Добавьте __construct () к своему контроллеру:

/**
 * Construct
 * @param DispatchService $dispatchService
 */
public function __construct(DispatchService $dispatchService) {
    $this->dispatchService = $dispatchService;
}

Затем вызовите это в своем методе index ():

public function index() {
    //Call the dispatchService
    return $this->dispatchService->dispatchUsers(auth()->user);
}

Переместите логику во вновь созданный DispatchService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...