Laravel- Перенаправление пользователей с динамическим параметром через контроллер

Я настроил веб-маршрутизацию, чтобы мой URL отображался в соответствии с localhost/testapp/public/{user}/hello

с этой текущей настройкой

Route::prefix('{user}')->middleware('user')->group(function () {
 Route::prefix('welcome')->group(function () {
  Route::view('/', 'layout.index')->name('index');
  Route::view('thank-you', 'layout.thank-you')->name('thankyou');
 });
 Route::get('/', 'HomeController@redirect');
});

Route::view('/', 'layout.index')->name('index'); эта строка работает так, как я хотел, но я не смог получить HomeController@redirect работать так, как я хочу.

Идея заключается в том, чтобы перенаправить пользователя, когда localhost/testapp/public/{user} вводится, это перенаправит пользователя на страницу localhost/testapp/public/{user}/hello

Вот так выглядит HomeController

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
 public function redirect(Request $request)
 {
  return redirect(['user' => $request, config('settings.default_user')].'/welcome');
 }
}

в результате чего, если динамический параметр как-то не получен, я бы использовал пользователя по умолчанию "admin", который хранится в моем файле settings.php в папке config.

1 ответ

Используйте необязательный параметр в файле маршрутов, иначе он покажет 404, если нет{user} предоставлен

Route::prefix('/{user?}')

Тогда с этим в config/settings.php

<?php
return ['default_user' => 456];

И это в HomeController

public function redirect(Request $request)
{
    if (empty($request->user)) {
        return redirect(config('settings.default_user') . '/welcome');
    } else {
        return redirect($request->user . '/welcome');
    }
}

Теперь, когда я пытаюсь в браузере

  • /123 перенаправляет меня на /123/welcome.
  • / перенаправляет меня на 456/welcome.
Другие вопросы по тегам