当我以访客身份重定向时,缺少 [Route: login] [URI: {locale}/login] 所需的参数

Vys*_*dis 2 php laravel

每当我以访客身份重定向时,都会收到错误消息:

缺少 [Route: login] [URI: {locale}/login] 的必需参数。

但是当我登录时它工作正常。这是我的 web.php 和 HomeController

网页.php

Route::get('/', function() {
    return redirect(app()->getLocale());
});

Route::group(['prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}'], 'middleware' => 'setlocale'], function () {

Route::get('/', function () {

return view('welcome');
})->name('main');

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

//Customers
Route::get('/customers', 'CustomerController@showcust')->name('customers');
Route::post('/sendcust', 'CustomerController@sendcust')->name('sendcust');


//Items
Route::get('/items', 'ItemController@showitems')->name('items');
Route::post('/senditem', 'ItemController@senditem')->name('senditem');

//Projects
Route::get('/projects', 'ProjectController@showprojects')->name('projects');
Route::post('/sendproj', 'ProjectController@sendproj')->name('sendproj');
//ProjectBillings
Route::get('/projects/{id}/billings', 'ProjectController@showbilling');
Route::post('/projects/{id}', 'ProjectController@addbilling')->name('addbilling');

Route::get('/invoices', 'InvoiceController@showinvoice')->name('invoices');
Route::post('/sendinvoitem', 'InvoiceController@sendinvoitem')->name('sendinvoitem');
Route::get('/invoices/{id}/details', 'InvoiceController@showdetails');
Route::post('/updateitem','InvoiceController@updatedetail')->name('updateitem');
Route::get('invoices/{id}/generate', 'InvoiceController@generate');
Route::post('/updatestatus', 'InvoiceController@changestatus')->name('updatestatus');

});
Run Code Online (Sandbox Code Playgroud)

家庭控制器.php

public function index()
{
    if(Auth::guest()){
        return redirect(app()->getLocale());
    }

    else{
    return view('admin.home');
    }
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 7

问题出在您的App\Http\Middleware\Authenticate中间件上。

您的登录路由需要一个locale参数 - 但是当您以访客身份访问需要身份验证的页面时,Authenticate将调用中间件。

默认情况下,Authenticate中间件包含:

protected function redirectTo($request)
{
    if (! $request->expectsJson()) {
        return route('login');
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要将所需的参数传递给路由:

return route('login', ['locale' => $desiredLocale])
Run Code Online (Sandbox Code Playgroud)