Перенаправление, если предполагаемый маршрут существует при регистрации в laravel

#php #laravel

Вопрос:

Я пытаюсь перенаправить пользователя на указанный URL-адрес после регистрации. Я сделал это в логине, и это работает. Но всякий раз, когда пользователь регистрируется, я всегда получаю ошибку:

Argument 1 passed to IlluminateAuthSessionGuard::login() must implement interface IlluminateContractsAuthAuthenticatable, null given .

Я думаю, вероятно, это произошло потому, что я не возвращаю $user из метода создания в RegisterController. Если да, то как это исправить? Я понятия не имею, как это сделать

Вот мой синтаксис RegisterController:

 protected function create(array $data)  {  $intended_url = Session::get('url.intended', url('/'));  if (isset($intended_url)) {  if ($intended_url == "http://kopinedw.test/checkout") {  $cart_cookies = Cookie::get('user_cart');  if (isset($cart_cookies)) {  $cart_decode = json_decode($cart_cookies, true);  foreach ($cart_decode as $key =gt; $cart_item) {  $product = Product::where('id', $cart_item['product_id'])-gt;first();  $user = User::create([  'name' =gt; $data['name'],  'email' =gt; $data['email'],  'password' =gt; Hash::make($data['password']),  'role' =gt; 'user',  ]);   Cart::create([  'product_id' =gt; $product-gt;id,  'user_id' =gt; $user-gt;id,  'price' =gt; $product-gt;price,  'total' =gt; $product-gt;price * $cart_item['quantity'],  'quantity' =gt; $cart_item['quantity'],  'discount' =gt; $product-gt;discount,  ]);  }  Cookie::queue(Cookie::forget('user_cart'));  return redirect()-gt;route('checkout');  }  } else {  return User::create([  'name' =gt; $data['name'],  'email' =gt; $data['email'],  'password' =gt; Hash::make($data['password']),  'role' =gt; 'user',  ]);  }  }  }  
 protected $redirectTo = '/user/mypanel';  

Или, может быть, я могу переопределить функцию перенаправления? Как это сделать? Я думаю о проверке URL-адреса, предназначенного для сеанса, на перенаправление на страницу оформления заказа, если указан предполагаемый URL-адрес.

Для подробного объяснения:

Дело в том, что если пользователь не вошел в систему, он может добавить товар в корзину, который сохраняется в файлах cookie. И когда пользователь нажмет кнопку оформить заказ, пользователь будет перенаправлен на страницу входа в систему, если у пользователя нет учетной записи, ему сначала нужно зарегистрироваться. После регистрации пользователь будет перенаправлен на страницу оформления заказа, а элемент корзины в файлах cookie будет перемещен в таблицу корзины в базе данных.

Спасибо

Ответ №1:

Ах! покопавшись в google и stackoverflow, я наконец нашел способ.

Мне просто нужно создать общедоступную функцию с тем же именем, что и redirectTo, и поместить в нее свой код.

 protected function redirectTo()  {  $intended_url = Session::get('url.intended', url('/'));  if (isset($intended_url)) {  if ($intended_url == "http://kopinedw.test/checkout") {  Cookie::queue(Cookie::forget('user_cart'));  return 'checkout';  }  }   return '/home';  }