2016-10-30 3 views
0

Бывший я создал свой собственный MVC, и там было index.php, что все страницы прошли путь от него. Я имею в виду, я мог бы переадресовать (header('Location: ..');) в index.php, а затем ни одна из моих страниц веб-сайта не может быть открыта.Домашняя страница маршрутизации в Laravel

Теперь я использую Laravel, и мне нужна основная страница (например, index.php). Потому что мой новый сайт поддерживает многоязычность. Вот мой текущий код:

// app/Http/routes.php 
Route::get('/{locale?}', '[email protected]'); 


// app/Http/Controllers/HomeController.php 
public function index($locale = null) 
{ 
    if(!is_null($locale)) { 
     Lang::setLocale($locale); 
    } 

    dd(Lang::getLocale()); 
    /* http://localhost:8000  => output: en -- default 
    * http://localhost:8000/abcde => output: en -- fallback language 
    * http://localhost:8000/en  => output: en -- defined language 
    * http://localhost:8000/es  => output: es -- defined language 
    * http://localhost:8000/fa  => output: fa -- defined language 
    */ 
} 

Как вы видите, в моем текущем алгоритме, мне нужно проверить язык, который пользователь установил для каждого маршрута. Также мой сайт имеет почти 30 маршрутов. Я могу сделать это вручную 30 раз для каждого маршрута, но я думаю, что есть способ, который позволяет мне сделать это один раз для всех маршрутов. Разве нет?

Другим словом, как установить текущий язык (пользователь установил) для каждой страницы? Должен ли я проверять/устанавливать его для каждого маршрута отдельно?

ответ

2

В Laravel есть более умный способ решить вашу проблему. Он называется Middleware. Таким образом, вы можете просто создать LangMiddleware и поместить свою логику внутрь.

Что-то вроде

public function handle($request, Closure $next, $locale = null) 
{ 
    if ($locale && in_array($locale, config('app.allowed_locales'))) { 
     Lang::setLocale($locale); 
    } 
    else{ 
     Lang::setLocale(config('app.fallback_locale')); 
    } 

    return $next($request); 
} 
+0

Да, я знаком с 'Middleware', но я не знаю, как я должен его реализовать. спасибо в любом случае, upvote –

+0

@MartinAJ Пожалуйста, проверьте обновленный ответ. Это просто идея, вам нужно исправить любую ошибку в моей реализации :) – aleksejjj

Смежные вопросы