Laravel 5.4: метод контроллера вызывается дважды при перенаправлении на него - PullRequest
2 голосов
/ 01 августа 2020

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

public function origin(Request $request) {
  // Assume I have set variables $user and $cvId
  return redirect()
    ->action('SampleController@confirmUser')
    ->with([
      'cvId' => $cvId,
      'userId' => $user->id,
     ]);
}

public function confirmUser(Request $request) {
  $cvId = session()->get('cvId');
  $userId = session()->get('userId');

  if (is_null($cvId) || is_null($userId)) {
    // This is reached on the second time this is called, as 
    // the session variables aren't set the second time
    return redirect('/home');
  }

  // We only see the view for fractions of a second before we are redirected home
  return view('sample.confirmUser', compact('user', 'cvId'));
}

Есть идеи, что могло быть причиной этого? У меня нет промежуточного программного обеспечения next или других возможных причин, которые предлагаются в связанных вопросах, где контроллеры выполняются дважды.

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 01 августа 2020

Вы пробовали передавать значения в параметрах? Попробуйте следующий код.

public function origin(Request $request) {
  // Assume I have set variables $user and $cvId
  return redirect()->action(
    'SampleController@confirmUser', ['cvId' => $cvId, 'userId'=>$user->id]
);
}

public function confirmUser(Request $request) {
  $cvId = $request->cvId;
  $userId = $request->userId;

  if (is_null($cvId) || is_null($userId)) {
    // This is reached on the second time this is called, as 
    // the session variables aren't set the second time
    return redirect('/home');
  }

  // We only see the view for fractions of a second before we are redirected home
  return view('sample.confirmUser', compact('user', 'cvId'));
}
...