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
use Illuminate\Support\Reflector;
6
use Illuminate\Support\Str;
7
use ReflectionFunction;
8
use ReflectionMethod;
9
 
10
class RouteSignatureParameters
11
{
12
    /**
13
     * Extract the route action's signature parameters.
14
     *
15
     * @param  array  $action
16
     * @param  array  $conditions
17
     * @return array
18
     */
19
    public static function fromAction(array $action, $conditions = [])
20
    {
21
        $callback = RouteAction::containsSerializedClosure($action)
22
                        ? unserialize($action['uses'])->getClosure()
23
                        : $action['uses'];
24
 
25
        $parameters = is_string($callback)
26
                        ? static::fromClassMethodString($callback)
27
                        : (new ReflectionFunction($callback))->getParameters();
28
 
29
        return match (true) {
30
            ! empty($conditions['subClass']) => array_filter($parameters, fn ($p) => Reflector::isParameterSubclassOf($p, $conditions['subClass'])),
31
            ! empty($conditions['backedEnum']) => array_filter($parameters, fn ($p) => Reflector::isParameterBackedEnumWithStringBackingType($p)),
32
            default => $parameters,
33
        };
34
    }
35
 
36
    /**
37
     * Get the parameters for the given class / method by string.
38
     *
39
     * @param  string  $uses
40
     * @return array
41
     */
42
    protected static function fromClassMethodString($uses)
43
    {
44
        [$class, $method] = Str::parseCallback($uses);
45
 
46
        if (! method_exists($class, $method) && Reflector::isCallable($class, $method)) {
47
            return [];
48
        }
49
 
50
        return (new ReflectionMethod($class, $method))->getParameters();
51
    }
52
}