summaryrefslogtreecommitdiffstats
path: root/Http/ParameterBagUtils.php
diff options
context:
space:
mode:
authorFabien Potencier <fabien.potencier@gmail.com>2015-09-30 11:18:13 +0200
committerFabien Potencier <fabien.potencier@gmail.com>2015-09-30 11:18:13 +0200
commitbf2ab7235258e8e35315f080e1a929de7f9517f5 (patch)
treea9061e0dd48d4fee801a4e36ccec315f4dcff86b /Http/ParameterBagUtils.php
parent493704bf17328063a6e566d912e6e063d4c60f8b (diff)
parentd37cee9ea33b5ece6837253a15d83e0740074bba (diff)
downloadsymfony-security-bf2ab7235258e8e35315f080e1a929de7f9517f5.zip
symfony-security-bf2ab7235258e8e35315f080e1a929de7f9517f5.tar.gz
symfony-security-bf2ab7235258e8e35315f080e1a929de7f9517f5.tar.bz2
Merge branch '2.8'
* 2.8: Remove profiler storages deprecate finding deep items in request parameters [CssSelector] updated README [CssSelector] remove ConverterInterface [DependencyInjection] improved a comment for reading fluency [HttpKernel] change a class in tests to avoid depending on SQLite [FrameworkBundle] Fix tests [Bridge\Twig] Fix form lowest version [ci] Display fastest results first when running tests in parallel [Yaml] Improve newline handling in folded scalar blocks
Diffstat (limited to 'Http/ParameterBagUtils.php')
-rw-r--r--Http/ParameterBagUtils.php96
1 files changed, 96 insertions, 0 deletions
diff --git a/Http/ParameterBagUtils.php b/Http/ParameterBagUtils.php
new file mode 100644
index 0000000..eed5421
--- /dev/null
+++ b/Http/ParameterBagUtils.php
@@ -0,0 +1,96 @@
+<?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\Security\Http;
+
+use Symfony\Component\HttpFoundation\ParameterBag;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\PropertyAccess\Exception\AccessException;
+use Symfony\Component\PropertyAccess\Exception\InvalidArgumentException;
+use Symfony\Component\PropertyAccess\PropertyAccess;
+
+/**
+ * @internal
+ */
+final class ParameterBagUtils
+{
+ private static $propertyAccessor;
+
+ /**
+ * Returns a "parameter" value.
+ *
+ * Paths like foo[bar] will be evaluated to find deeper items in nested data structures.
+ *
+ * @param ParameterBag $parameters The parameter bag
+ * @param string $path The key
+ *
+ * @return mixed
+ *
+ * @throws InvalidArgumentException when the given path is malformed
+ */
+ public static function getParameterBagValue(ParameterBag $parameters, $path)
+ {
+ if (false === $pos = strpos($path, '[')) {
+ return $parameters->get($path);
+ }
+
+ $root = substr($path, 0, $pos);
+
+ if (null === $value = $parameters->get($root)) {
+ return;
+ }
+
+ if (null === self::$propertyAccessor) {
+ self::$propertyAccessor = PropertyAccess::createPropertyAccessor();
+ }
+
+ try {
+ return self::$propertyAccessor->getValue($value, substr($path, $pos));
+ } catch (AccessException $e) {
+ return;
+ }
+ }
+
+ /**
+ * Returns a request "parameter" value.
+ *
+ * Paths like foo[bar] will be evaluated to find deeper items in nested data structures.
+ *
+ * @param Request $request The request
+ * @param string $path The key
+ *
+ * @return mixed
+ *
+ * @throws InvalidArgumentException when the given path is malformed
+ */
+ public static function getRequestParameterValue(Request $request, $path)
+ {
+ if (false === $pos = strpos($path, '[')) {
+ return $request->get($path);
+ }
+
+ $root = substr($path, 0, $pos);
+
+ if (null === $value = $request->get($root)) {
+ return;
+ }
+
+ if (null === self::$propertyAccessor) {
+ self::$propertyAccessor = PropertyAccess::createPropertyAccessor();
+ }
+
+ try {
+ return self::$propertyAccessor->getValue($value, substr($path, $pos));
+ } catch (AccessException $e) {
+ return;
+ }
+ }
+}