laravel 6 ошибка маршрута при попытке перенаправить - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь перенаправить на страницу входа, когда кто-то нажимает на домашнюю страницу в URL, но всегда выдает ошибку вроде

Маршрут [admin / login] не определен.

Многие вопросы возникают с той же проблемой, но не решают проблему.

Также тот же маршрут работает, если напрямую ввести URL, тогда он работает, но перенаправление с Authenticate.php не работает.

маршруты / Интернет. 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');

});

Аутентификация. 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');
            }


        }
    }
}

1 Ответ

2 голосов
/ 03 марта 2020

Вы не называете свои маршруты, поэтому вы не можете называть их так, вам нужно использовать:

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 'admin/login';
...