2016-01-02 4 views
7

J'utilise Laravel 5.1, je suis en train de mettre à jour locale dans le fichier application comme ceci: Dans le fichier Middleware Locale:Laravel: App :: setLocale ne fonctionne pas

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

     return $next($request); 
    } 

Toute idée sur ce ??

+1

Vous avez un problème de récurrence ici, que contient le paramètre '$ next'? – ViRuSTriNiTy

+0

Quels sont les symptômes de "doesnt work"? Êtes-vous sûr que les paramètres régionaux sont définis dans la session? –

+0

Oui, je peux voir sa valeur en utilisant: Session :: get ('locale'):/ – BKF

Répondre

6

Oooof enfin après deux heures> < '!! C'est la place de la classe locale dans middleware -.- '!!! Je l'ai mis en dernière ligne comme celui-ci:

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

et tout ira bien et travailler! merci pour vous tous :))))

+0

J'ai le même problème. Line place était l'un des premiers articles pour moi, mais ça ne marche pas encore! – ivahidmontazer

2

La seule solution que j'ai trouvé a été locale définie dans la méthode constructeur de milieu articles, comme celui-ci:

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

Avec ♥♥♥ et plus de 2 heures à essayer!

0

Merci,

:) J'ai eu le même problème et la solution a été mis le middleware dans le fichier App \ Http \ Kernel.php dans la section protégée middleware $ = []

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

... comme il y a un an. Ne dupliquez pas les réponses ici. –