2015-04-25 16 views
5

Laravel 5 projemde yerelleştirmeyi uygulamaya çalışıyorum ve bir sorunla karşılaşıyorum. aşağıdaki gibi ben dilini yakalamak için koymak ara yazılımdır:Laravel 5 yerelleştirme: exclude/public/directory

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Routing\Redirector; 
use Illuminate\Http\Request; 
use Illuminate\Foundation\Application; 
use Illuminate\Contracts\Routing\Middleware; 

class Language implements Middleware { 

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

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     // Make sure current locale exists. 
     $locale = $request->segment(1); 


     if (! array_key_exists($locale, $this->app->config->get('app.locales'))) { 
      $segments = $request->segments(); 
      $segments[0] = $this->app->config->get('app.fallback_locale'); 

      return $this->redirector->to(implode('/', $segments)); 
     } 

     $this->app->setLocale($locale); 

     return $next($request); 
    } 

} 

kernel.php:

protected $middleware = [ 
     'App\Http\Middleware\Language', 
     'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', 
     'Illuminate\Cookie\Middleware\EncryptCookies', 
     'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse', 
     'Illuminate\Session\Middleware\StartSession', 
     'Illuminate\View\Middleware\ShareErrorsFromSession', 
     'App\Http\Middleware\VerifyCsrfToken', 
    ]; 

routeserviceprovider.php:

public function map(Router $router, Request $request) 
    { 
     $locale = $request->segment(1); 

     $this->app->setLocale($locale); 

     $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) { 
      require app_path('Http/routes.php'); 
     }); 
    } 

O birini haricinde mükemmel çalışıyor şey. http://0.0.0.0/public/css/images/myimage.png'a gitmeyi denediğimde 'u en ile değiştiriyor ve /en/public'a gidersem, rotanın mevcut olmadığını söylüyor.

Genel dizinin bu veya yerelleştirilmesinden kaldırılması, katmanı içermeyen daha iyi bir şekilde almanıza yardımcı olur mu?

+1

Lütfen bu konuya bakın: http://stackoverflow.com/q/29723344/2772319 – Digitlimit

+4

Web sunucunuz, 'public' dizinini doğrudan site köküne sunarak PHP'ye geri göndermemelidir. Bunu düzeltmenin doğru yolu budur. Hangi web sunucusu kullanıyorsunuz? Bu yapılandırma dosyasını bizimle paylaşabilir misiniz? –

cevap

1

Görüntünüzün ortak klasör altında olması ve ortak klasörün ortak klasör olması ve Apache'de yapılandırılmış olması gerekir.

seçmenize aşağıdaki URL'yi kullanarak görüntüyü erişebilmesi için yapılandırmayı düzeltmek zorunda: http://0.0.0.0/css/images/myimage.png

Ve kamu yapılandırılmış ortak klasör olduğunda bu gerçekleşecektir.