Whenever I redirect as a guest, I get an error:
Missing required parameters for [Route: login] [URI: {locale}/login].
But it works fine when I logged in. Here are my web.php and HomeController
web.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'); });
HomeController.php
public function index() { if(Auth::guest()){ return redirect(app()->getLocale()); } else{ return view('admin.home'); } }
Advertisement
Answer
The issue is in your AppHttpMiddlewareAuthenticate
middleware.
Your login route expects a locale
parameter – but when you visit a page that requires authentication as a guest, the Authenticate
middleware will be called.
By default, the Authenticate
middleware contains:
protected function redirectTo($request) { if (! $request->expectsJson()) { return route('login'); } }
You need to pass the required parameter to the route:
return route('login', ['locale' => $desiredLocale])