Немного предыстории того, что я сейчас делаю и пытаюсь достичь.
Я решил следовать этому шаблону для разработки, так как мои контроллеры становятся смехотворно огромными,В результате я теперь создал репозитории и сервисы, которые обрабатывают всю мою логику. Мои контроллеры теперь очень легкие.
Почему? Потому что сейчас я полностью фокусируюсь на функциональности сайта и использую базовый веб-интерфейс начальной загрузки. Позже, когда я начну изучать 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;
}
}
Я добавил встроенные комментарии к приведенному выше блоку кода.
Как я могу перенести эту функцию из моего контроллера в мои службы? Любые идеи будут с благодарностью.
Спасибо.