2016-01-02 3 views
7

Ich verwende Laravel 5.1, ich versuche locale in App-Datei wie folgt zu aktualisieren: In Locale Middleware-Datei:Laravel: App :: setLocale funktioniert nicht

... 
public function handle($request, Closure $next) 
    {  
     if(Session::has('locale')) 
     { 
      $lang = Session::get('locale');    
      App::setLocale($lang);   
     } 

     return $next($request); 
    } 

Jede Idee, über diese ??

+1

Sie haben hier ein Rekursionsproblem, was hat der Parameter '$ next'? – ViRuSTriNiTy

+0

Was sind die Symptome von "funktioniert nicht"? Sind Sie sicher, dass das Gebietsschema in der Sitzung festgelegt ist? –

+0

Ja Ich kann seinen Wert sehen mit: Session :: get ('locale'):/ – BKF

Antwort

6

Oooof endlich nach zwei Stunden> < '!! Es ist die Zeile Ort der Locale-Klasse in Middleware -.- !!! Ich stelle es in letzte Zeile wie folgt aus:

... 
    ... 
    \App\Http\Middleware\VerifyCsrfToken::class, 
     \App\Http\Middleware\Locale::class,   
    ]; 

und Alles ist in Ordnung und funktioniert! Dank für euch alle :))))

+0

Ich habe das gleiche Problem. Line-Platz war einer der ersten Artikel für mich, aber es funktioniert noch nicht! – ivahidmontazer

2

Die einzige Lösung, die ich locale in Konstruktor-Methode von Middleware eingestellt gefunden, wie folgt aus:

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Foundation\Application; 
use Illuminate\Http\Request; 

class Localization 
{ 

    protected $app; 

    public function __construct(Application $app, Request $request) 
    { 
     if($locale = $request->header('Content-Language')){ 
      if(in_array($locale, ['en', 'fa'])){ 
       $app->setLocale($locale); 
      } 
     } 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     return $next($request); 
    } 
} 

Mit ♥♥♥ und mehr als 2 Stunden mit dem Versuch!

0

Danke,

:) Ich hatte das gleiche Problem und die Lösung wurde die Middleware in der Datei App setzen \ Http \ Kernel.php im Abschnitt geschützt $ Middleware = []

\App\Http\Middleware\VerifyCsrfToken::class, 
    \App\Http\Middleware\myNewMiddleware::class,   
]; 
+1

... wie vor einem Jahr beantwortet. Dupliziere hier keine Antworten. –