Возврат к маршруту после промежуточного программного обеспечения, запущенного в Laravel - PullRequest
2 голосов
/ 12 марта 2020

Я работаю в Laravel 7 и у меня есть промежуточное ПО, которое проверяет, есть ли у пользователя текущее пользовательское соглашение, если нет, оно перенаправляет в форму, которая предлагает текущее соглашение. Когда предложение будет принято, мне нужно перенаправить обратно туда, куда они изначально направлялись. Я думаю, что мне нужно поместить что-то в сеанс, чтобы, когда мой контроллер сохранял их принятие, он мог перенаправить обратно на исходный маршрут.

class VerifyAgreement
{
    public function handle($request, Closure $next, $agreement)
    {
        if(UserAgreement::outOfDate($agreement)){
           return redirect()->route('agreement.offer', $agreement);
        }
        return $next($request);
    }
}

Я думаю, что мне нужно получить текущий запрос и передать его на перенаправление, чтобы контроллер пользовательского соглашения мог каким-то образом его перехватить и затем перенаправить после сохранения соглашения ... Я не уверен.

class AgreementController extends Controller
{
    public function offer(Agreement $agreement)
    {
        return view('agreement.offer',['agreement' => $agreement]);
    }

    public function agree(Request $request)
    {
        $agreement_uuid = App\Agreement::findOrFail($request->agreement)->uuid;
        UserAgreement::create(['user_uuid'=>auth()->user()->uuid, 'agreement_uuid'=>$agreement_uuid]);
        //redirect something something something
    }
}

1 Ответ

0 голосов
/ 13 марта 2020

Как уже упоминалось в комментариях @ Ruben Danielyan, Illuminate\Routing\Redirector имеет несколько методов, которые могут оказаться полезными

Redirector. php

/**
 * Create a new redirect response to the previously intended location.
 *
 * @param  string  $default
 * @param  int     $status
 * @param  array   $headers
 * @param  bool|null    $secure
 * @return \Illuminate\Http\RedirectResponse
 */
public function intended($default = '/', $status = 302, $headers = [], $secure = null)
{
    $path = $this->session->pull('url.intended', $default);

    return $this->to($path, $status, $headers, $secure);
}

/**
 * Set the intended url.
 *
 * @param  string  $url
 * @return void
 */
public function setIntendedUrl($url)
{
    $this->session->put('url.intended', $url);
}
...