LocalizerMiddleware::handle()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 2
nop 2
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
1
<?php
2
3
namespace VSamovarov\LaravelLocalizer\Middleware;
4
5
use VSamovarov\LaravelLocalizer\Localizer;
6
use Closure;
7
use Illuminate\Http\Request;
8
9
/**
10
 * Устанавливаем локаль для Веб
11
 */
12
class LocalizerMiddleware
13
{
14
    private $localizer;
15
    public function __construct(Localizer $localizer)
16
    {
17
        $this->localizer = $localizer;
18
    }
19
    /**
20
     * Handle an incoming request.
21
     *
22
     * @param  \Illuminate\Http\Request  $request
23
     * @param  \Closure  $next
24
     * @return mixed
25
     */
26
    public function handle($request, Closure $next)
27
    {
28
        $prefix = (string) $request->segment(1);
29
        if($this->localizer->isHideDefaultLocaleInURL() && $prefix === $this->localizer->getDefaultLocale()) {
30
          return redirect($this->getNonLocaleURL($request, $prefix));
31
        }
32
        $this->setLocale($prefix);
33
34
        return $next($request);
35
    }
36
37
    /**
38
     * Устанавливаем локаль
39
     *
40
     * @param string $prefix
41
     * @return void
42
     */
43
    private function setLocale(string $prefix): void
44
    {
45
        if ($this->localizer->isSupportedLocale($prefix)) {
46
            $this->localizer->setLocale($prefix);
47
        } else {
48
            $this->localizer->setLocale($this->localizer->getDefaultLocale());
49
        }
50
    }
51
    
52
    /**
53
     * Возвращает урл без префикса локали
54
     *
55
     * @param Request $request
56
     * @param string $prefix
57
     * @return string
58
     */
59
    private function getNonLocaleURL(Request $request, string $prefix): string
60
    {
61
      return preg_replace ("{^\/{$prefix}}", '', $request->getRequestUri());
62
    }
63
}
64