В качестве хорошей практики должны ли Laravel контроллеры основываться на ресурсах или на представлениях? - PullRequest
0 голосов
/ 04 августа 2020

Я хотел бы знать, существует ли хорошая практика в отношении контроллеров Laravel.

Должны ли они быть на основе ресурсов или на основе представления?

Для большей ясности, под ресурсом я подразумеваю отдельную сущность в приложении, например, Пользователь, Блог, Комментарий, Платеж и т. Д. c. и то, что я имею в виду под представлением, - это страница / экран, которые видит пользователь.

Кроме того, представление может отображать несколько ресурсов, смешанных вместе, например, скажем, представление «Учетные записи», которое будет отображать различные ресурсы, такие как

  1. все добровольцы, ожидающие выплаты (ресурс волонтеров)
  2. недавние платежи (ресурс оплаты)
  3. оплаченные недавние задачи (ресурс задачи) и т.д. c.

Итак, лучше ли иметь контроллер для всех вышеупомянутых ресурсов, а затем получать их отдельно (задачи, добровольцы и платежи отдельно) или, скорее, иметь контроллер для представления «Учетные записи» где один запрос вернет все данные, необходимые для отображения на странице?

Любые советы будут полезны!

1 Ответ

0 голосов
/ 04 августа 2020

На самом деле нет "правильного" способа создания вашего контроллера, он полностью зависит от контекста.

Мое практическое правило - пытаться следовать принципам SOLID и проверять контроллер i ' м.

Хорошо

В вашем примере я, вероятно, создал бы AccountController в качестве контроллера ресурсов и вернул бы Account с соответствующими моделями как часть представления show :

public function show(Request $request, $id)
{
    $account = Account::with(['volunteers','payments','tasks'])->find(1);
    
    return view('accounts.show', [
        'account' => $account
    ]);
}

Это имеет смысл, поскольку AccountController отвечает за возврат Account.

Плохо

Однако что-то вроде этого было бы плохой идеей

public function showAccount(Request $request, $id)
{
    $account = Account::find(1);
    
    return view('accounts.show', [
        'account' => $account
    ]);
}

public function showPayments(Request $request, $id)
{
    $payments = Payment::where('account_id', $id)->get();
    
    return view('payments.show', [
        'payments' => $payments
    ]);
}

Это сделало бы AccountController ответственным за возврат Payment что не имеет смысла. В этом случае я бы разделил контроллеры и получил PaymentController

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