Laravel Redirect kembali ke halaman yang sama setelah mengubah lokal

Cara saya mengimplementasikan multilang adalah melalui middleware dan rute.

Lokalisasi Middleware.php terlihat seperti ini:

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);
}

Dan di web.php saya, saya punya:

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

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

  return redirect($path);

})->name('langroute');

Di blade saya menggunakannya seperti ini:

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

Bagaimana saya bisa mengarahkan kembali ke halaman yang sama setelah mengubah ke bahasa lain?


person Marinario Agalliu    schedule 11.01.2021    source sumber
comment
Oke, jika tidak berhasil, lihat pengontrol ini, ini berfungsi. github.com/akaunting/lingual/blob/master/src/ Pengontrol/   -  person Taha Paksu    schedule 11.01.2021
comment
Itu adalah sebuah paket dan implementasinya benar-benar berbeda dari milik saya jadi saya tidak dapat menyelesaikan masalah saya dengan metode pengontrolnya... Seperti yang saya tentukan, saya hanya menggunakan middleware dan rute untuk mengimplementasikan multilang...   -  person Marinario Agalliu    schedule 12.01.2021
comment
Ia mendapatkan url sebelumnya dari dua sumber, satu dari global dan satu lagi dari cookie, Anda juga dapat menggunakan kedua cara untuk mendapatkan url sebelumnya.   -  person Taha Paksu    schedule 12.01.2021
comment
Cara saya mengalihkan adalah melalui href. Saya sudah mencoba dengan {{route(Route::currentRouteName(), 'en') }} tetapi itu akan memberi saya kesalahan dengan parameter pada rute halaman yang memerlukan parameter.   -  person Marinario Agalliu    schedule 12.01.2021
comment
ada tanda ->withInput() yang menyertakan string kueri sebelumnya. Mungkin itu bisa membantu.   -  person Taha Paksu    schedule 12.01.2021
comment
Ya, tapi menurutku bukan itu masalahnya   -  person Marinario Agalliu    schedule 12.01.2021
comment
Pokoknya terima kasih kawan   -  person Marinario Agalliu    schedule 12.01.2021


Jawaban (1)


Saya harap jawaban ini membantu seseorang karena saya tahu banyak orang yang kesulitan dengan hal ini. Kredit diberikan kepada @khaledw62 yang menjawab saya di laracasts: Tautan di sini

Saya menulis jawabannya di sini.

1- Anda dapat mengaturnya pada blade seperti ini:

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

Dan Anda dapat mengalihkan ke $newYrl seperti ini:

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

2- Cara lain adalah membagikan variabel global ke semua tampilan Anda seperti berikut di AppServiceProvider Anda:

<?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);
}
}

Dan Anda dapat mengarahkan ulang di blade sama seperti sebelumnya:

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

Selamat membuat kode!

person Marinario Agalliu    schedule 13.01.2021