Laravel Redirect обратно на ту же страницу после смены языка

Я реализовал многоязыковость через промежуточное ПО и маршруты.

Middleware Localization.php выглядит так:

public function handle(Request $request, Closure $next)
{
    $locale = $request->segment(1); 


    if(empty($locale)) { 
        return redirect()->to('/' . app()->getLocale());
    }

    if(in_array($locale, ['en','it'])) {
        App::setLocale($locale);
        $request->except(0); 
    }

    return $next($request);
}

И в моем web.php у меня есть:

Route::get('locale/{locale}', function ($locale){

  \Session::put('locale', $locale);
  $path = Route::getCurrentRoute()->getPath();

  return redirect($path);

})->name('langroute');

В лезвии я использую это так:

<a class="dropdown-item" href="{{ url('/en') }}">

Как я могу перенаправить обратно на ту же страницу после перехода на другой язык?


person Marinario Agalliu    schedule 11.01.2021    source источник
comment
Хорошо, если у вас не заработало, взгляните на этот контроллер, он работает. github.com/akaunting/language/blob/master/src/ Контроллеры/   -  person Taha Paksu    schedule 11.01.2021
comment
Это пакет, и реализация полностью отличается от моей, поэтому я не могу решить свою проблему с помощью его метода контроллера... Как я указал, я использовал только промежуточное программное обеспечение и маршруты для реализации многоязычия...   -  person Marinario Agalliu    schedule 12.01.2021
comment
Он получает предыдущий URL-адрес из двух источников, один из глобальных и один из файлов cookie, вы также можете использовать оба способа для получения предыдущего URL-адреса.   -  person Taha Paksu    schedule 12.01.2021
comment
Я перенаправляюсь через href. Я пробовал с {{route(Route::currentRouteName(), 'en') }}, но это выдает ошибку с параметрами на маршрутах страниц, для которых требуются параметры.   -  person Marinario Agalliu    schedule 12.01.2021
comment
есть флаг ->withInput(), который включает предыдущую строку запроса. Может быть, это может помочь.   -  person Taha Paksu    schedule 12.01.2021
comment
Да, но это не тот случай, я думаю   -  person Marinario Agalliu    schedule 12.01.2021
comment
В любом случае спасибо бро   -  person Marinario Agalliu    schedule 12.01.2021


Ответы (1)


Я надеюсь, что этот ответ поможет кому-то, потому что я знаю, что многие борются с этим. Кредиты принадлежат @khaledw62, который ответил мне в laracasts: Ссылка здесь

Пишу ответ сюда.

1- Вы можете управлять им на лезвии следующим образом:

 @php
    $thisUrl = url()->current().'/';
    if (app()->getlocale() == 'en') {
        $newUrl  = str_replace('/en/', '/it/', $thisUrl);
    }else{
        $newUrl  = str_replace('/it/', '/en/', $thisUrl);
    }
 @endphp

И вы можете перенаправить на $newYrl следующим образом:

<a class="dropdown-item" href="{{ $newUrl }}">

2- Другой способ - поделиться глобальной переменной со всеми вашими представлениями, как показано ниже в вашем AppServiceProvider:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    //
}

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    $thisUrl = url()->current().'/';
    if (app()->getlocale() == 'en') {
        $newUrl  = str_replace('/en/', '/it/', $thisUrl);
    }else{
        $newUrl  = str_replace('/it/', '/en/', $thisUrl);
    }
    View::share('newUrl', $newUrl);
}
}

И вы можете перенаправить в лезвии так же, как и раньше:

<a class="dropdown-item" href="{{ $newUrl }}">

Удачного кодирования!

person Marinario Agalliu    schedule 13.01.2021