Bonjour,
Je veux traduire mon site web en français et en anglais. J'ai préparer le terrain, en passent un paramètre globale dans tout mes route de mon appliicaton (web). Voila je rencontre un petit problème avec mon code.
Voici une portion des routes du groupe web avec le paramètre $locale
/**
* We redirect the user on the default current local of the application.
*/
Route::redirect('/', '/'.locale()->current(), 301);
Route::prefix('{locale}')->group(function (){
Route::get('/', 'PagesController@index')->name('welcome');
Auth::routes('{locale}');
Route::get('/confirm/{id}/{token}', 'Auth\RegisterController@confirm')->name('confirm');
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/profile/{name}', 'UsersController@index')->name('public.profile');
/**
* Blog routes (public)
*/
Route::group(['prefix' => 'blog', 'as' => 'blog.'], function (){
Route::get('/', 'PostsController@index')->name('index');
Route::get('/{slug}', 'PostsController@show')->name('single');
Route::get('/category/{slug}', 'PostsController@Category')->name('category');
});
/**
* Contact Routes (public)
*/
Route::group(['prefix' => 'contact', 'as' => 'contact.'], function () {
Route::get('/', 'ContactController@index')->name('index');
});
/**
* Projects routes (public)
*/
Route::group(['prefix' => 'projects', 'as' => 'project.'], function (){
Route::get('/', 'ProjectsController@index')->name('index');
Route::get('/{slug}', 'ProjectsController@show')->name('single');
Route::get('/category/{slug}', 'ProjectsController@Category')->name('category');
});
/**
* User backend
*/
Route::group(['prefix' => 'my', 'as' => 'my.', 'middleware' => ['auth']], function (){
Route::get('edit', 'UsersController@edit')->name('edit');
Route::put('edit', 'UsersController@update')->name('update');
Route::get('/carousel', 'CarouselsController@index')->name('carousel');
});
Ce paramètre globale ne sois jamais perdu dans tout les reqêtes de mon application.
Quand j'essais d'avoir accès à une page privée sans être connecté avant. J'obtien cette erreur suivant :
Missing required parameters for [Route: login] [URI: {locale}/login]. L'or de la redirection mon paramètre $locale n'est pas passé. Ma route qui s'appelle à une strucutre suivante :
Methode : GET|HEAD
Uri {locale}/login
Nome : login
Action : App\Http\Controllers\Auth\LoginController@showLoginForm
Middleware web,guest
Dans ce contrôlleur j'ai cette function showLoginForm() :
J'ai passé le paramètre $locale dans ma fonction. Ça ne fonctione pas.
public function showLoginForm(string $locale)
{
return view('auth.login');
}
Dans mon menu je fait passer le paramètre $locale manuellement ça fonctione très bien :
<a class="menu__link__right" href="{{ route('login', locale()->current()) }}">{{ __('Login') }}</a>
Ça me génére cette url :
demo.demo/en/login
Comment je peut caputer cette redirection vers la page login quand un utilisateur essais d'avoir accèe à une page sans être connecté.
Merci de votre aide.
Merci de ton aide j'ai trouver finalement la solution. J'ai écouter quand le middleware Auth lance une execption AuthenticationException. Dans le fichier Handler dans le dossier Exception de mon application :
protected function unauthenticated($request, AuthenticationException $exception) {
$isJsonRequest = $request->isJson();
$defaultLocale = locale()->current();
// If is a API REST request, we will return a json request with exception message
if ($isJsonRequest) {
return $request->json(['message' => $exception->getMessage()], 401);
}
// Else we will redirect the unauthenticated user go to login page.
return redirect(route('login', $defaultLocale))
->with('error', "Sorry, you should to be authenticated to have to access to this page.");
}