сеанс не сохраняется в laravel - PullRequest
0 голосов
/ 10 мая 2019

Я использую Сессию в laravel, но когда я получаю сессию в контроллере, это не работает.

web.php

Route::get('locale/{locale}',function ($locale){
    //Session::put('locale',$locale);
    session(['locale' => $locale]);
    Session::save();
    return redirect()->back();
});

Localization.php

public function handle($request, Closure $next)
{
    if(\Session::has('locale')){
        \App::setLocale(\Session::get('locale'));
        session(['locale' => \Session::get('locale')]);
        \Session::save();
    }

    return $next($request);
}

Kernel.php

protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\Localization::class,
    ],

    'api' => [
        \App\Http\Middleware\EventLogMiddle::class,
        'throttle:600,1',
        'bindings',
    ],
];

MachCtrl.php (расширяет контроллер)

public function index()
{
    $lang = session('locale');
    $config = json_encode([
        "table" => "Machine_list",
        "title" => "machine list",
        "rows" => 20,
        "column" => [
            "Machine_id", "VM_name", "Machine_location","IP_address", 
            "Network_status", "Current_status"
        ],
        "CUDP" => "0111",
        "CreateRoute" => route('machine.create'),
        "DeleteRoute" => route('machine.destroy'),
        "UpdateRoute" => route('machine.editInfo'),
        "locale" => $lang,
    ]);

    return view('table.show')->with(['config' => $config, 'lang' => 
                                                            $lang]);
}

Я сохраняю Session в роутере и middlemare, это не работает.

Но когда я помещаю Session в Controller, это работает. Как следующий код:

public function index()
{
    session(['locale' => 'en']);
    $lang = session('locale');
    $config = json_encode([
        "table" => "Machine_list",
        "title" => "machine list",
        "rows" => 20,
        "column" => [
            "Machine_id", "VM_name", "Machine_location","IP_address", 
            "Network_status", "Current_status"
        ],
        "CUDP" => "0111",
        "CreateRoute" => route('machine.create'),
        "DeleteRoute" => route('machine.destroy'),
        "UpdateRoute" => route('machine.editInfo'),
        "locale" => $lang,
    ]);

    return view('table.show')->with(['config' => $config, 'lang' => 
                                                           $lang]);
}

Я действительно хочу знать, что происходит в моем проекте. Благодаря.

Edit: Я использую dd (session ()) в моем коде:

-web.php

Route::get('locale/{locale}',function ($locale){
    Session::put('locale',$locale);
    Session::save();
    dd(session());
    return redirect()->back();
});

Результат:

enter image description here

-Localization.php

public function handle($request, Closure $next)
{


    if(\Session::has('locale')){
        \App::setLocale(\Session::get('locale'));
        session(['locale' => \Session::get('locale')]);
        //dd(session());
        \Session::save();

    }

    return $next($request);
}

Результат:

enter image description here

-MachCtrl.php

public function index()
{
    dd(session());
    $lang = session('locale');
    $config = json_encode([
        "table" => "Machine_list",
        "title" => "machine list",
        "rows" => 20,
        "column" => [
            "Machine_id", "VM_name", "Machine_location","IP_address", 
            "Network_status", "Current_status"
        ],
        "CUDP" => "0111",
        "CreateRoute" => route('machine.create'),
        "DeleteRoute" => route('machine.destroy'),
        "UpdateRoute" => route('machine.editInfo'),
        "locale" => $lang,
    ]);

    return view('table.show')->with(['config' => $config, 'lang' => 
                                                            $lang]);
}

Результат: enter image description here

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Я проверил свой рабочий код.Я установил весь цикл как:

Промежуточное программное обеспечение языка:

class Language
{
    protected $app;

    public function __construct(Application $app, Request $request) {
        $this->app = $app;
    }

    public function handle($request, Closure $next)
    {
        $this->app->setLocale(session('user_locale', config('app.locale')));

        return $next($request); 
    }
}

В моем промежуточном ПО Kernel.php:

protected $middlewareGroups = [
    'web' => [
         \Illuminate\Session\Middleware\StartSession::class,
         //...
         \App\Http\Middleware\Language::class,
    ]
];

А в пути:

Route::get('locale/{locale}',function ($locale){
     session(['user_locale' => $locale]);
});
1 голос
/ 10 мая 2019

Попробуйте использовать другой драйвер сеанса, чтобы немного округлить проблему.

РЕДАКТИРОВАТЬ: Извините, я не могу комментировать, <50rep: (</p>

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