Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Routing;
4
 
5
class RouteUri
6
{
7
    /**
8
     * The route URI.
9
     *
10
     * @var string
11
     */
12
    public $uri;
13
 
14
    /**
15
     * The fields that should be used when resolving bindings.
16
     *
17
     * @var array
18
     */
19
    public $bindingFields = [];
20
 
21
    /**
22
     * Create a new route URI instance.
23
     *
24
     * @param  string  $uri
25
     * @param  array  $bindingFields
26
     * @return void
27
     */
28
    public function __construct(string $uri, array $bindingFields = [])
29
    {
30
        $this->uri = $uri;
31
        $this->bindingFields = $bindingFields;
32
    }
33
 
34
    /**
35
     * Parse the given URI.
36
     *
37
     * @param  string  $uri
38
     * @return static
39
     */
40
    public static function parse($uri)
41
    {
42
        preg_match_all('/\{([\w\:]+?)\??\}/', $uri, $matches);
43
 
44
        $bindingFields = [];
45
 
46
        foreach ($matches[0] as $match) {
47
            if (! str_contains($match, ':')) {
48
                continue;
49
            }
50
 
51
            $segments = explode(':', trim($match, '{}?'));
52
 
53
            $bindingFields[$segments[0]] = $segments[1];
54
 
55
            $uri = str_contains($match, '?')
56
                ? str_replace($match, '{'.$segments[0].'?}', $uri)
57
                : str_replace($match, '{'.$segments[0].'}', $uri);
58
        }
59
 
60
        return new static($uri, $bindingFields);
61
    }
62
}