2015-04-25 2 views
5

Я пытаюсь реализовать локализацию в моем проекте Laravel 5, и у меня возникает проблема. Промежуточное, что я вставил, чтобы поймать язык выглядит следующим образом:Laravel 5 локализация: 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'); 
     }); 
    } 

Это прекрасно работает, за исключением одного вещь. Когда я пытаюсь перейти на http://0.0.0.0/public/css/images/myimage.png, он заменяет publicen, и если я перейду к /en/public, это говорит мне, что маршрут не существует.

Любая помощь в том, чтобы исключить из этого общедоступного каталога или реализовать локализацию в лучшем виде, который не связан с промежуточным программным обеспечением?

+1

См. Это: http://stackoverflow.com/q/29723344/2772319 – Digitlimit

+4

Ваш веб-сервер должен обслуживать каталог 'public' непосредственно как корень сайта, а не передавать его на PHP. Это правильный способ исправить это. Какой веб-сервер вы используете? Можете ли вы поделиться с нами этим файлом конфигурации? –

ответ

1

Ваше изображение должно находиться в открытой папке, а общая папка должна быть общедоступной и настроена в Apache.

Вы должны исправить конфигурацию, так что вы можете получить доступ изображения, используя следующий URL: http://0.0.0.0/css/images/myimage.png

И это будет происходить, когда общественность настроена ваша общая папка.

Смежные вопросы