2022-08-19 19:48:37 +08:00
< ? 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 ;
use Symfony\Component\HttpFoundation\Exception\BadRequestException ;
/**
* ParameterBag is a container for key / value pairs .
*
* @ author Fabien Potencier < fabien @ symfony . com >
*
* @ implements \IteratorAggregate < string , mixed >
*/
class ParameterBag implements \IteratorAggregate , \Countable
{
/**
* Parameter storage .
*/
protected $parameters ;
public function __construct ( array $parameters = [])
{
$this -> parameters = $parameters ;
}
/**
* Returns the parameters .
*
* @ param string | null $key The name of the parameter to return or null to get them all
*/
2022-11-28 19:11:12 +08:00
public function all ( string $key = null ) : array
2022-08-19 19:48:37 +08:00
{
if ( null === $key ) {
return $this -> parameters ;
}
if ( ! \is_array ( $value = $this -> parameters [ $key ] ? ? [])) {
throw new BadRequestException ( sprintf ( 'Unexpected value for parameter "%s": expecting "array", got "%s".' , $key , get_debug_type ( $value )));
}
return $value ;
}
/**
* Returns the parameter keys .
*/
2022-11-28 19:11:12 +08:00
public function keys () : array
2022-08-19 19:48:37 +08:00
{
return array_keys ( $this -> parameters );
}
/**
* Replaces the current parameters by a new set .
*/
public function replace ( array $parameters = [])
{
$this -> parameters = $parameters ;
}
/**
* Adds parameters .
*/
public function add ( array $parameters = [])
{
$this -> parameters = array_replace ( $this -> parameters , $parameters );
}
2022-11-28 19:11:12 +08:00
public function get ( string $key , mixed $default = null ) : mixed
2022-08-19 19:48:37 +08:00
{
return \array_key_exists ( $key , $this -> parameters ) ? $this -> parameters [ $key ] : $default ;
}
2022-11-28 19:11:12 +08:00
public function set ( string $key , mixed $value )
2022-08-19 19:48:37 +08:00
{
$this -> parameters [ $key ] = $value ;
}
/**
* Returns true if the parameter is defined .
*/
2022-11-28 19:11:12 +08:00
public function has ( string $key ) : bool
2022-08-19 19:48:37 +08:00
{
return \array_key_exists ( $key , $this -> parameters );
}
/**
* Removes a parameter .
*/
public function remove ( string $key )
{
unset ( $this -> parameters [ $key ]);
}
/**
* Returns the alphabetic characters of the parameter value .
*/
2022-11-28 19:11:12 +08:00
public function getAlpha ( string $key , string $default = '' ) : string
2022-08-19 19:48:37 +08:00
{
return preg_replace ( '/[^[:alpha:]]/' , '' , $this -> get ( $key , $default ));
}
/**
* Returns the alphabetic characters and digits of the parameter value .
*/
2022-11-28 19:11:12 +08:00
public function getAlnum ( string $key , string $default = '' ) : string
2022-08-19 19:48:37 +08:00
{
return preg_replace ( '/[^[:alnum:]]/' , '' , $this -> get ( $key , $default ));
}
/**
* Returns the digits of the parameter value .
*/
2022-11-28 19:11:12 +08:00
public function getDigits ( string $key , string $default = '' ) : string
2022-08-19 19:48:37 +08:00
{
// 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 .
*/
2022-11-28 19:11:12 +08:00
public function getInt ( string $key , int $default = 0 ) : int
2022-08-19 19:48:37 +08:00
{
return ( int ) $this -> get ( $key , $default );
}
/**
* Returns the parameter value converted to boolean .
*/
2022-11-28 19:11:12 +08:00
public function getBoolean ( string $key , bool $default = false ) : bool
2022-08-19 19:48:37 +08:00
{
return $this -> filter ( $key , $default , \FILTER_VALIDATE_BOOLEAN );
}
/**
* Filter key .
*
2022-11-28 19:11:12 +08:00
* @ param int $filter FILTER_ * constant
2022-08-19 19:48:37 +08:00
*
* @ see https :// php . net / filter - var
*/
2022-11-28 19:11:12 +08:00
public function filter ( string $key , mixed $default = null , int $filter = \FILTER_DEFAULT , mixed $options = []) : mixed
2022-08-19 19:48:37 +08:00
{
$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 ;
}
if (( \FILTER_CALLBACK & $filter ) && ! (( $options [ 'options' ] ? ? null ) instanceof \Closure )) {
2022-11-28 19:11:12 +08:00
throw new \InvalidArgumentException ( sprintf ( 'A Closure must be passed to "%s()" when FILTER_CALLBACK is used, "%s" given.' , __METHOD__ , get_debug_type ( $options [ 'options' ] ? ? null )));
2022-08-19 19:48:37 +08:00
}
return filter_var ( $value , $filter , $options );
}
/**
* Returns an iterator for parameters .
*
* @ return \ArrayIterator < string , mixed >
*/
2022-11-28 19:11:12 +08:00
public function getIterator () : \ArrayIterator
2022-08-19 19:48:37 +08:00
{
return new \ArrayIterator ( $this -> parameters );
}
/**
* Returns the number of parameters .
*/
2022-11-28 19:11:12 +08:00
public function count () : int
2022-08-19 19:48:37 +08:00
{
return \count ( $this -> parameters );
}
}