Рефакторинг повторяющихся методов контроллера в Laravel - PullRequest
0 голосов
/ 28 ноября 2018

Я немного запутался в своем коде в Laravel.У меня есть участник, который может подписаться на один или несколько уроков.У меня есть три таблицы: участники, уроки и lesson_member.

Я создал форму участника, и из этой формы я могу зарегистрировать участника в уроке (мне нужно получить идентификатор урока и поставитьзапись в сводной таблице).

Тогда у меня есть форма урока;Я могу создать новый урок и поместить в него одного или нескольких участников (в этом случае мне нужен код участника).Эти две функции почти одинаковы, но параметры разные.В своем решении я создал два разных контроллера с двумя разными функциями.

LessonController

<?php

public function addMember(Request $request)
{
    $lessonMember = new LessonMember();
    $lessonId = $request->session()->get('lessonId', 1);

    if ((!($lessonMember::where('lesson_id', '=', $lessonId)
        ->where('license_member_id', '=', $request->memberId)
        ->exists()))) {
        $lessonMember->lesson_id = $lessonId;
        $lessonMember->license_member_id = $request->memberId;
        $lessonMember->save();
        $member = LicenseMember::find($request->memberId)->member;

        return response()->json(['user_saved' => $member, 'llm' => $lessonMember, 'actualMembers' => $actualMembers]);
    }
}

MemberController

<?php

public function addLesson(Request $request)
{
    $lessonMember = new LessonMember();
    $memberId = $request->session()->get('memberId', 1);

    if ((!($lessonMember::where('lesson_id', $request->lessonId)
        ->where('license_member_id', $memberId)
        ->exists()))) {
        $lessonMember->lesson_id = $request->lessonId;
        $lessonMember->license_member_id = $memberId;
        $lessonMember->save();
        $member = LicenseMember::find($memberId)->member;

        return response()->json(['user_saved' => $member, 'llm' => $lessonMember]);
    }
}

У меня та же проблема с методом removeFromLesson () и с методом updateLessonMember, но решение должно быть аналогичным.Это точно не СУХОЙ, и я думаю, что я должен поместить некоторый код в модель (или где-то еще), но я не знаю, как поступить.Я хочу провести рефакторинг, чтобы получить чистое решение.Я читал о чертах, но я не знаю, правильно ли это следовать.

1 Ответ

0 голосов
/ 28 ноября 2018

LessonController и MemberController расширяют BaseController.

Внутри этого базового контроллера создайте функцию с именем add_lesson_member (вы можете вызывать ее как хотите)

Затемвам просто нужно вызвать эту функцию, используя $this->add_lesson_member() внутри вашего LessonController или MemberController.

...