审查视图

vendor/symfony/http-foundation/ParameterBag.php 5.8 KB
王智 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
<?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\HttpFoundation;

/**
 * ParameterBag is a container for key/value pairs.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class ParameterBag implements \IteratorAggregate, \Countable
{
    /**
     * Parameter storage.
     */
    protected $parameters;
王智 authored
26 27 28
    /**
     * @param array $parameters An array of parameters
     */
王智 authored
29 30 31 32 33 34 35 36 37 38
    public function __construct(array $parameters = [])
    {
        $this->parameters = $parameters;
    }

    /**
     * Returns the parameters.
     *
     * @return array An array of parameters
     */
王智 authored
39
    public function all()
王智 authored
40
    {
王智 authored
41
        return $this->parameters;
王智 authored
42 43 44 45 46 47 48 49 50 51 52 53 54 55
    }

    /**
     * Returns the parameter keys.
     *
     * @return array An array of parameter keys
     */
    public function keys()
    {
        return array_keys($this->parameters);
    }

    /**
     * Replaces the current parameters by a new set.
王智 authored
56 57
     *
     * @param array $parameters An array of parameters
王智 authored
58 59 60 61 62 63 64 65
     */
    public function replace(array $parameters = [])
    {
        $this->parameters = $parameters;
    }

    /**
     * Adds parameters.
王智 authored
66 67
     *
     * @param array $parameters An array of parameters
王智 authored
68 69 70 71 72 73 74 75 76
     */
    public function add(array $parameters = [])
    {
        $this->parameters = array_replace($this->parameters, $parameters);
    }

    /**
     * Returns a parameter by name.
     *
王智 authored
77 78
     * @param string $key     The key
     * @param mixed  $default The default value if the parameter key does not exist
王智 authored
79 80 81
     *
     * @return mixed
     */
王智 authored
82
    public function get($key, $default = null)
王智 authored
83 84 85 86 87 88 89
    {
        return \array_key_exists($key, $this->parameters) ? $this->parameters[$key] : $default;
    }

    /**
     * Sets a parameter by name.
     *
王智 authored
90 91
     * @param string $key   The key
     * @param mixed  $value The value
王智 authored
92
     */
王智 authored
93
    public function set($key, $value)
王智 authored
94 95 96 97 98 99 100
    {
        $this->parameters[$key] = $value;
    }

    /**
     * Returns true if the parameter is defined.
     *
王智 authored
101 102
     * @param string $key The key
     *
王智 authored
103 104
     * @return bool true if the parameter exists, false otherwise
     */
王智 authored
105
    public function has($key)
王智 authored
106 107 108 109 110 111
    {
        return \array_key_exists($key, $this->parameters);
    }

    /**
     * Removes a parameter.
王智 authored
112 113
     *
     * @param string $key The key
王智 authored
114
     */
王智 authored
115
    public function remove($key)
王智 authored
116 117 118 119 120 121 122
    {
        unset($this->parameters[$key]);
    }

    /**
     * Returns the alphabetic characters of the parameter value.
     *
王智 authored
123 124 125
     * @param string $key     The parameter key
     * @param string $default The default value if the parameter key does not exist
     *
王智 authored
126 127
     * @return string The filtered value
     */
王智 authored
128
    public function getAlpha($key, $default = '')
王智 authored
129 130 131 132 133 134 135
    {
        return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default));
    }

    /**
     * Returns the alphabetic characters and digits of the parameter value.
     *
王智 authored
136 137 138
     * @param string $key     The parameter key
     * @param string $default The default value if the parameter key does not exist
     *
王智 authored
139 140
     * @return string The filtered value
     */
王智 authored
141
    public function getAlnum($key, $default = '')
王智 authored
142 143 144 145 146 147 148
    {
        return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default));
    }

    /**
     * Returns the digits of the parameter value.
     *
王智 authored
149 150 151
     * @param string $key     The parameter key
     * @param string $default The default value if the parameter key does not exist
     *
王智 authored
152 153
     * @return string The filtered value
     */
王智 authored
154
    public function getDigits($key, $default = '')
王智 authored
155 156 157 158 159 160 161 162
    {
        // we need to remove - and + because they're allowed in the filter
        return str_replace(['-', '+'], '', $this->filter($key, $default, \FILTER_SANITIZE_NUMBER_INT));
    }

    /**
     * Returns the parameter value converted to integer.
     *
王智 authored
163 164 165
     * @param string $key     The parameter key
     * @param int    $default The default value if the parameter key does not exist
     *
王智 authored
166 167
     * @return int The filtered value
     */
王智 authored
168
    public function getInt($key, $default = 0)
王智 authored
169 170 171 172 173 174 175
    {
        return (int) $this->get($key, $default);
    }

    /**
     * Returns the parameter value converted to boolean.
     *
王智 authored
176 177 178
     * @param string $key     The parameter key
     * @param bool   $default The default value if the parameter key does not exist
     *
王智 authored
179 180
     * @return bool The filtered value
     */
王智 authored
181
    public function getBoolean($key, $default = false)
王智 authored
182 183 184 185 186 187 188
    {
        return $this->filter($key, $default, \FILTER_VALIDATE_BOOLEAN);
    }

    /**
     * Filter key.
     *
王智 authored
189 190 191 192
     * @param string $key     Key
     * @param mixed  $default Default = null
     * @param int    $filter  FILTER_* constant
     * @param mixed  $options Filter options
王智 authored
193 194 195 196 197
     *
     * @see https://php.net/filter-var
     *
     * @return mixed
     */
王智 authored
198
    public function filter($key, $default = null, $filter = \FILTER_DEFAULT, $options = [])
王智 authored
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
    {
        $value = $this->get($key, $default);

        // Always turn $options into an array - this allows filter_var option shortcuts.
        if (!\is_array($options) && $options) {
            $options = ['flags' => $options];
        }

        // Add a convenience check for arrays.
        if (\is_array($value) && !isset($options['flags'])) {
            $options['flags'] = \FILTER_REQUIRE_ARRAY;
        }

        return filter_var($value, $filter, $options);
    }

    /**
     * Returns an iterator for parameters.
     *
     * @return \ArrayIterator An \ArrayIterator instance
     */
    public function getIterator()
    {
        return new \ArrayIterator($this->parameters);
    }

    /**
     * Returns the number of parameters.
     *
     * @return int The number of parameters
     */
    public function count()
    {
        return \count($this->parameters);
    }
}