возможно ли переопределить параметр в функции back () - PullRequest
2 голосов
/ 28 сентября 2019

У меня здесь простая проблема.

Вот мой код

  1. route
Route::post('change-language', 'LanguageController@changeLanguage')->name('changeLanguage')->middleware('localization');
промежуточное программное обеспечение для локализации
public function handle($request, Closure $next)
    {
        if (session()->has('locale') && \App\Language::get('lang')->pluck('lang')->contains(Route::getFacadeRoot()->current()->parameter('locale'))) {
            $lang = Route::getFacadeRoot()->current()->parameter('locale');
            App::setLocale($lang);
            session()->put('locale', $lang);
            return $next($request);
        }elseif(session()->has('locale') && !\App\Language::get('lang')->pluck('lang')->contains(Route::getFacadeRoot()->current()->parameter('locale'))){
            $lang = 'id';
            App::setLocale($lang);
            session()->put('locale', $lang);
            return $next($request);
        }
    }
Функция changeLanguage
public function changeLanguage(Request $req)
    {
        return redirect()->back();
    }

Как вы можете видеть в промежуточном программном обеспечении локализации, я меняю язык на основе URL-адреса маршрута.когда я изменяю возвращение changeLocalization что-то вроде return redirect($req->lang), оно работает как шарм.но я хочу перенаправить обратно на предыдущий маршрут.Можно ли добавить или переопределить параметр маршрута в функции back ()?

1 Ответ

0 голосов
/ 28 сентября 2019

Функция changeLanguage должна отвечать за фактическое изменение языка, а не только за перенаправление

Вот пример того, как я это делаю

routes/web.php

Route::get('lang/{locale}', 'LocaleController@update')
    ->name('locale')
    ->where('locale', '(en|fr|ar)');
// Further filter in route regex (accepts only English, French and Arabic)

LocaleController.php

<?php

namespace Caddy\Http\Controllers;

class LocaleController extends Controller
{
    public function update($locale)
    {
        // Check if the $locale passed is in the array config/app.php => locales
        if (in_array($locale, config('app.locales'))) {
            // Put the $locale in session with the same name as key
            session(['locale' => $locale]);
        }
        // redirect back
        return back();
    }
}

Locale.php связующее ПО

<?php

namespace Caddy\Http\Middleware;

use Closure;

class Locale
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $session_locale = session('locale');
        if (in_array($session_locale, config('app.locales'))) {
            // Keep the locale if already in session
            $locale = $session_locale;
        } else {
            // Fallback to English if not defined
            $locale = config('app.locale');
        }
        app()->setLocale($locale);
        return $next($request);
    }
}

Применение промежуточного ПО в глобальном масштабе

Http\Kernel.php

protected $middlewareGroups = [
        'web' => [
            \Caddy\Http\Middleware\Locale::class,
        ],

Вотmy config/app.php

'locale' => 'en',
'locales' => ['en', 'fr', 'ar'],

Тестирование

  • Перейти к домену.tld / about Страница на английском языке
  • Изменить URL-адрес на domain.tld / lang /fr Вы перенаправлены обратно в / о, и страница на французском языке

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...