Completed
Pull Request — master (#500)
by Marcel
03:07 queued 01:17
created

Utils::getFullUrl()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
1
<?php
2
3
namespace Mpociot\ApiDoc\Tools;
4
5
use Illuminate\Support\Str;
6
use Illuminate\Routing\Route;
7
8
class Utils
9
{
10
    public static function getFullUrl(Route $route, array $bindings = []): string
11
    {
12
        $uri = $route->uri();
13
14
        return self::replaceUrlParameterBindings($uri, $bindings);
15
    }
16
17
    /**
18
     * Transform parameters in URLs into real values (/users/{user} -> /users/2).
19
     * Uses bindings specified by caller, otherwise just uses '1'.
20
     *
21
     * @param string $uri
22
     * @param array $bindings
23
     *
24
     * @return mixed
25
     */
26
    protected static function replaceUrlParameterBindings(string $uri, array $bindings)
27
    {
28
        foreach ($bindings as $path => $binding) {
29
            // So we can support partial bindings like
30
            // 'bindings' => [
31
            //  'foo/{type}' => 4,
32
            //  'bar/{type}' => 2
33
            //],
34
            if (Str::is("*$path*", $uri)) {
35
                preg_match('/({.+?})/', $path, $parameter);
36
                $uri = str_replace("{$parameter['1']}", $binding, $uri);
37
            }
38
        }
39
        // Replace any unbound parameters with '1'
40
        $uri = preg_replace('/{(.+?)}/', 1, $uri);
41
42
        return $uri;
43
    }
44
}
45