laravel 6 尝试重定向时出现路由问题
laravel 6 route issue when try to redirect
当有人在 URL 中点击主页时,我试图重定向到登录页面,但它总是给出类似
的错误
Route [admin/login] not defined.
同样的问题有很多问题,但没有解决问题。
如果直接输入 URL,同样的路由也可以工作,但是从 Authenticate.php
重定向是行不通的。
routes/web.php
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
// Admin Routes
// Without auth
Route::group(['prefix' => 'admin', 'namespace' => 'Auth'], function () {
Route::get('/login', 'AdminLoginController@login');
});
Route::group(['prefix' => 'admin', 'namespace' => 'Auth', 'middleware' => 'auth:admin'], function () {
Route::get('/home', 'AdminLoginController@home');
});
Authenticate.php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
if ($request->is('admin') || $request->is('admin/*')) {
return route('admin/login');
} else if ($request->is('vendor') || $request->is('vendor/*')) {
return route('vendor/login');
} else {
return route('login');
}
}
}
}
你没有命名你的路由,所以你不能这样调用它们,你需要使用:
Route::group(['prefix' => 'admin', 'namespace' => 'Auth'], function () {
// just add the name to the route to call route('login')
Route::get('/login', 'AdminLoginController@login')->name('login');
});
然后你可以打电话:
return route('login');
或者,如果您不想命名路线,请改用:
return redirect('admin/login');
编辑:
我的错误,你使用了 redirectTo 函数,所以你只需要 return 一个字符串,使用这个 :
return 'admin/login';
当有人在 URL 中点击主页时,我试图重定向到登录页面,但它总是给出类似
的错误Route [admin/login] not defined.
同样的问题有很多问题,但没有解决问题。
如果直接输入 URL,同样的路由也可以工作,但是从 Authenticate.php
重定向是行不通的。
routes/web.php
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
// Admin Routes
// Without auth
Route::group(['prefix' => 'admin', 'namespace' => 'Auth'], function () {
Route::get('/login', 'AdminLoginController@login');
});
Route::group(['prefix' => 'admin', 'namespace' => 'Auth', 'middleware' => 'auth:admin'], function () {
Route::get('/home', 'AdminLoginController@home');
});
Authenticate.php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
if ($request->is('admin') || $request->is('admin/*')) {
return route('admin/login');
} else if ($request->is('vendor') || $request->is('vendor/*')) {
return route('vendor/login');
} else {
return route('login');
}
}
}
}
你没有命名你的路由,所以你不能这样调用它们,你需要使用:
Route::group(['prefix' => 'admin', 'namespace' => 'Auth'], function () {
// just add the name to the route to call route('login')
Route::get('/login', 'AdminLoginController@login')->name('login');
});
然后你可以打电话:
return route('login');
或者,如果您不想命名路线,请改用:
return redirect('admin/login');
编辑:
我的错误,你使用了 redirectTo 函数,所以你只需要 return 一个字符串,使用这个 :
return 'admin/login';