Использование Laravel для создания LMS и назначения курсов студентам - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать простую систему LMS, используя Laravel.Я слежу за руководством по YouTube и репозиторием QuickLMS здесь: https://github.com/LaravelDaily/QuickLMS/. Большинство приложений работает нормально, однако есть одна функция, которую я хочу изменить и от которой избавиться.

Я борюсьс определенной функцией, которая назначает ученика или пользователя на курс.Всякий раз, когда студент открывает курс на первой странице, вверху отображается кнопка с надписью «Купить курс», которая загружает всплывающее окно «Полоса», чтобы студент мог заплатить.После оплаты курс назначается студенту в таблице course_student.

Код, который я позаимствовал, использует Stripe для получения оплаты за курс.Я хочу, чтобы эта кнопка была кнопкой «Записаться на курс», а не кнопкой оплаты.Таким образом, когда студент входит в курс, вместо этого отображается кнопка для зачисления в курс, которая добавляет студентов в таблицу course_student без необходимости какой-либо информации об оплате.

CoursesController.php:

public function payment(Request $request)
    {
        $course = Course::findOrFail($request->get('course_id'));
        $this->createStripeCharge($request);
        $course->students()->attach(\Auth::id());
        return redirect()->back()->with('success', 'Payment completed successfully.');
    }
    private function createStripeCharge($request)
    {
        Stripe::setApiKey(env('STRIPE_API_KEY'));
        try {
            $customer = Customer::create([
                'email' => $request->get('stripeEmail'),
                'source'  => $request->get('stripeToken')
            ]);
            $charge = Charge::create([
                'customer' => $customer->id,
                'amount' => $request->get('amount'),
                'currency' => "usd"
            ]);
        } catch (\Stripe\Error\Base $e) {
            return redirect()->back()->withError($e->getMessage())->send();
        }
    }

course.blade.php:

<form action="{{ route('courses.payment') }}" method="POST">
                    <input type="hidden" name="course_id" value="{{ $course->id }}" />
                    <input type="hidden" name="amount" value="{{ $course->price * 100 }}" />
                    <script
                            src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                            data-key="{{ env('PUB_STRIPE_API_KEY') }}"
                            data-amount="{{ $course->price * 100 }}"
                            data-currency="usd"
                            data-name="Quick LMS"
                            data-label="Buy course (${{ $course->price }})"
                            data-description="Course: {{ $course->title }}"
                            data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
                            data-locale="auto"
                            data-zip-code="false">
                    </script>

web.php:

Route::post('course/payment', ['uses' => 'CoursesController@payment', 'as' => 'courses.payment']);

Я попытался изменить все это, удалив все ссылки на Stripe, и вместо этого создал новую функцию, которая выглядит следующим образом:

CoursesController.php:

 public function register (Request $request)
    {
        $this->createSubscription($request);
        return redirect()->back()->with('success', 'Payment completed successfully.');

    }

    private function createSubscription($request)
    {
        $course = Course::findOrFail($request->get('course_id'));
        $course->students()->attach(\Auth::id());
    }

Однако, это только генерирует "страницуexpired "от Laravel, и я не могу понять, как просто отпустить кнопку Stripe.

Я попытался заменить всю функцию" payment "безуспешно.Я думаю, что это код, который я хочу, но он, очевидно, нуждается в некоторых изменениях, чтобы работать, хотя я не могу понять это:

        $course->students()->attach(\Auth::id());

1 Ответ

0 голосов
/ 30 мая 2019

Я решил это сам, создав две новые функции: CoursesController.php:

public function register (Request $request)
    {
        $course = Course::findOrFail($request->get('course_id'));
        $this->createSubscription($request);
        $course->students()->attach(\Auth::id());
        return redirect()->back()->with('success', 'Payment completed successfully.');


    }

    private function createSubscription($request)
    {
        return;

    }

И следующая форма на course.blade.php:

 <form action="{{ route('courses.register') }}" method="POST">
                    {{ csrf_field() }}
                    <input type="hidden" name="course_id" value="{{ $course->id }}" />
                <input type="submit" value="Submit me"></form>

Web.php

Route::post('course/register/', ['uses' => 'CoursesController@register', 'as' => 'courses.register']);

Возможно, это можно сделать лучше, но это то, что я искал.

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