| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\Routing\Annotation;/** * Annotation class for @Route(). * * @Annotation * @NamedArgumentConstructor * @Target({"CLASS", "METHOD"}) * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander M. Turek <me@derrabus.de> */#[\Attribute(\Attribute::IS_REPEATABLE | \Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD)]class Route{    private $path;    private $localizedPaths = [];    private $name;    private $requirements = [];    private $options = [];    private $defaults = [];    private $host;    private $methods = [];    private $schemes = [];    private $condition;    private $priority;    private $env;    /**     * @param array|string      $data         data array managed by the Doctrine Annotations library or the path     * @param array|string|null $path     * @param string[]          $requirements     * @param string[]|string   $methods     * @param string[]|string   $schemes     *     * @throws \BadMethodCallException     */    public function __construct(        $data = [],        $path = null,        string $name = null,        array $requirements = [],        array $options = [],        array $defaults = [],        string $host = null,        $methods = [],        $schemes = [],        string $condition = null,        int $priority = null,        string $locale = null,        string $format = null,        bool $utf8 = null,        bool $stateless = null,        string $env = null    ) {        if (\is_string($data)) {            $data = ['path' => $data];        } elseif (!\is_array($data)) {            throw new \TypeError(sprintf('"%s": Argument $data is expected to be a string or array, got "%s".', __METHOD__, get_debug_type($data)));        } elseif ([] !== $data) {            $deprecation = false;            foreach ($data as $key => $val) {                if (\in_array($key, ['path', 'name', 'requirements', 'options', 'defaults', 'host', 'methods', 'schemes', 'condition', 'priority', 'locale', 'format', 'utf8', 'stateless', 'env', 'value'])) {                    $deprecation = true;                }            }            if ($deprecation) {                trigger_deprecation('symfony/routing', '5.3', 'Passing an array as first argument to "%s" is deprecated. Use named arguments instead.', __METHOD__);            } else {                $localizedPaths = $data;                $data = ['path' => $localizedPaths];            }        }        if (null !== $path && !\is_string($path) && !\is_array($path)) {            throw new \TypeError(sprintf('"%s": Argument $path is expected to be a string, array or null, got "%s".', __METHOD__, get_debug_type($path)));        }        $data['path'] = $data['path'] ?? $path;        $data['name'] = $data['name'] ?? $name;        $data['requirements'] = $data['requirements'] ?? $requirements;        $data['options'] = $data['options'] ?? $options;        $data['defaults'] = $data['defaults'] ?? $defaults;        $data['host'] = $data['host'] ?? $host;        $data['methods'] = $data['methods'] ?? $methods;        $data['schemes'] = $data['schemes'] ?? $schemes;        $data['condition'] = $data['condition'] ?? $condition;        $data['priority'] = $data['priority'] ?? $priority;        $data['locale'] = $data['locale'] ?? $locale;        $data['format'] = $data['format'] ?? $format;        $data['utf8'] = $data['utf8'] ?? $utf8;        $data['stateless'] = $data['stateless'] ?? $stateless;        $data['env'] = $data['env'] ?? $env;        $data = array_filter($data, static function ($value): bool {            return null !== $value;        });        if (isset($data['localized_paths'])) {            throw new \BadMethodCallException(sprintf('Unknown property "localized_paths" on annotation "%s".', static::class));        }        if (isset($data['value'])) {            $data[\is_array($data['value']) ? 'localized_paths' : 'path'] = $data['value'];            unset($data['value']);        }        if (isset($data['path']) && \is_array($data['path'])) {            $data['localized_paths'] = $data['path'];            unset($data['path']);        }        if (isset($data['locale'])) {            $data['defaults']['_locale'] = $data['locale'];            unset($data['locale']);        }        if (isset($data['format'])) {            $data['defaults']['_format'] = $data['format'];            unset($data['format']);        }        if (isset($data['utf8'])) {            $data['options']['utf8'] = filter_var($data['utf8'], \FILTER_VALIDATE_BOOLEAN) ?: false;            unset($data['utf8']);        }        if (isset($data['stateless'])) {            $data['defaults']['_stateless'] = filter_var($data['stateless'], \FILTER_VALIDATE_BOOLEAN) ?: false;            unset($data['stateless']);        }        foreach ($data as $key => $value) {            $method = 'set'.str_replace('_', '', $key);            if (!method_exists($this, $method)) {                throw new \BadMethodCallException(sprintf('Unknown property "%s" on annotation "%s".', $key, static::class));            }            $this->$method($value);        }    }    public function setPath(string $path)    {        $this->path = $path;    }    public function getPath()    {        return $this->path;    }    public function setLocalizedPaths(array $localizedPaths)    {        $this->localizedPaths = $localizedPaths;    }    public function getLocalizedPaths(): array    {        return $this->localizedPaths;    }    public function setHost(string $pattern)    {        $this->host = $pattern;    }    public function getHost()    {        return $this->host;    }    public function setName(string $name)    {        $this->name = $name;    }    public function getName()    {        return $this->name;    }    public function setRequirements(array $requirements)    {        $this->requirements = $requirements;    }    public function getRequirements()    {        return $this->requirements;    }    public function setOptions(array $options)    {        $this->options = $options;    }    public function getOptions()    {        return $this->options;    }    public function setDefaults(array $defaults)    {        $this->defaults = $defaults;    }    public function getDefaults()    {        return $this->defaults;    }    public function setSchemes($schemes)    {        $this->schemes = \is_array($schemes) ? $schemes : [$schemes];    }    public function getSchemes()    {        return $this->schemes;    }    public function setMethods($methods)    {        $this->methods = \is_array($methods) ? $methods : [$methods];    }    public function getMethods()    {        return $this->methods;    }    public function setCondition(?string $condition)    {        $this->condition = $condition;    }    public function getCondition()    {        return $this->condition;    }    public function setPriority(int $priority): void    {        $this->priority = $priority;    }    public function getPriority(): ?int    {        return $this->priority;    }    public function setEnv(?string $env): void    {        $this->env = $env;    }    public function getEnv(): ?string    {        return $this->env;    }}
 |