【问题标题】:Refactor Repeated Controller Methods in Laravel在 Laravel 中重构重复的控制器方法
【发布时间】:2019-04-30 19:11:36
【问题描述】:

我对我在 Laravel 中的代码有点困惑。我有一个会员可以订阅一门或多门课程。我有三个表:成员、课程和课程成员。

我创建了一个会员表格,从这个表格中,我可以在课程中注册会员(我需要获取课程ID,并将记录放在数据透视表中)。

然后我有课表;我可以创建一个新课程并放入一个或多个成员(在这种情况下我需要成员代码)。 这两个功能几乎相同,但参数不同。在我的解决方案中,我创建了两个具有两种不同功能的不同控制器。

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]);
    }
}

会员控制器

<?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 方法中遇到了同样的问题,但解决方案应该是相似的。它肯定不是 DRY,我想我必须在模型中(或其他地方)放一些代码,但我不知道如何进行。我想重构一个干净的解决方案。我读过关于特质的文章,但我不知道这是否是正确的做法。

【问题讨论】:

    标签: laravel model refactoring laravel-controller


    【解决方案1】:

    LessonControllerMemberController 扩展了 BaseController

    在该基本控制器中,创建一个名为 add_lesson_member 的函数(你可以随意调用它)

    然后你只需要在你的 LessonController 或 MemberController 中使用$this-&gt;add_lesson_member() 调用这个函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2013-08-11
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多