Skip to content

Instantly share code, notes, and snippets.

@meyerbaptiste
Last active May 12, 2017 13:48
Show Gist options
  • Save meyerbaptiste/86d6e98bad00e78cfc45dd8b83fca53c to your computer and use it in GitHub Desktop.
Save meyerbaptiste/86d6e98bad00e78cfc45dd8b83fca53c to your computer and use it in GitHub Desktop.
<?php
use Symfony\Component\HttpFoundation\Request;
/**
* @see https://github.com/symfony/symfony/pull/18834
*/
class FieldsHelper
{
private function __construct()
{
}
/**
* ?fields[]=foo&fields[]=bar.baz.qux&fields[]=baz.qux&fields[]=qux
* => ['foo', 'bar' => ['baz' => 'qux'], 'baz' => 'qux', 'qux']
*/
public static function extractFieldsFromRequest(Request $request): array
{
$fields = [];
if (!is_array($queryFields = $request->query->get('fields'))) {
return $fields;
}
foreach ($queryFields as $queryField) {
$field = static::convertQueryField($queryField);
if (is_array($field)) {
$fields = array_merge_recursive($fields, $field);
} else {
$fields[] = $field;
}
}
return $fields;
}
/**
* foo.bar.baz.qux
* => ['foo' => ['bar' => ['baz => 'qux']]]
*
* foo
* => 'foo'
*
* foo.bar
* => ['foo' => 'bar']
*/
public static function convertQueryField(string $field)
{
$explodedField = explode('.', $field, 2);
if (!isset($explodedField[1])) {
return $explodedField[0];
}
$convertedField[$explodedField[0]] = static::convertQueryField($explodedField[1]);
return $convertedField;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment