Laravel - подписанный маршрут с ошибкой 404 для ссылки на отписку по электронной почте

У меня есть ссылка для отписки от писем, но когда я нажимаю на ссылку, я получаю ошибку 404.

это мой код.

Во-первых, это генерация ссылки для отписки с подписанным маршрутом (ссылка в порядке)

private function generateUnsubscribeLink($meoId, $email)
{
    return URL::signedRoute(
        'meo.confirm-unsubscribe', [
            'meo' => $meoId,
            'email' => $email
        ]
    );
}

далее, это мои маршруты web.php

Route::get('/unsubscribe/{meo}/{email}', 'MeoMailController@confirmUnsubscribe')->name('meo.confirm-unsubscribe');
Route::post('/unsubscribe/confirmed/{meo}/{email}', 'MeoMailController@unsubscribe')->name('meo.unsubscribe');

и, наконец, это мой контроллер

public function confirmUnsubscribe(Request $request, Meo $meo, MailRecipient $email){
        if (!$request->hasValidSignature()) {
            abort(401);
        }

        return view('mail.confirm_unsubscribe', compact(['request', 'meo', 'email']));
    }

    public function unsubscribe(Meo $meo, MailRecipient $email)
    {
          $email->state = MailRecipientState::UNSUBSCRIBED;
          $email->save();

        return view('mail.unsubscribed');
    }

конечным результатом этого является то, что когда я нажимаю на ссылку отписки, возникает ошибка 404

введите здесь описание изображения

ссылка для отказа от подписки/meoId/[email protected]?SIGNEDROUTE

что здесь не так?

Раньше я использовал тот же метод, но без электронной почты (только с использованием meoId) и работал правильно.


person André Cuellar Avaroma    schedule 31.01.2021    source источник
comment
это означает, что ваша электронная почта в MailRecipient не найдена   -  person Muhammad Dyas Yaskur    schedule 31.01.2021
comment
@MuhammadDyasYaskur, могу ли я использовать только $email для подтверждения отмены подписки?   -  person André Cuellar Avaroma    schedule 31.01.2021
comment
Я не знаю, что такое MailRecipient? модель или библиотечная функция?   -  person Muhammad Dyas Yaskur    schedule 31.01.2021
comment
@MuhammadDyasYaskur модель   -  person André Cuellar Avaroma    schedule 31.01.2021
comment
так что да, проверьте мой ответ для полного кода   -  person Muhammad Dyas Yaskur    schedule 31.01.2021


Ответы (1)


измените MailRecipient $email в аргументе метода на $email, затем найдите эту модель вручную, например $email = MailRecipient::where('email',$email)->first(). должно быть так:

public function confirmUnsubscribe(Request $request, Meo $meo, $email){
 if (!$request->hasValidSignature()) {
abort(401);
}

$email = MailRecipient::where('email',$email)->first();
return view('mail.confirm_unsubscribe', compact(['request', 'meo', 'email']));
}

public function unsubscribe(Meo $meo, $email)
{
$email = MailRecipient::where('email',$email)->first();

$email->state = MailRecipientState::UNSUBSCRIBED;
$email->save();

return view('mail.unsubscribed');
}
person Muhammad Dyas Yaskur    schedule 31.01.2021