Skip to content

Commit 84d6c9f

Browse files
author
Bertrand Dunogier
committed
EZP-24264: QueryController ExpressionLanguage support
Entries from params.queryParameter will be searched for values starting with '@=' (standard expression language syntax in yaml). The expressions will be processed by the QueryController, and have access to: - `view`: the ContentView - `content`: the rendered Content - `location`: the rendered Location, if any This expression would pass the location id as the parentLocationId queryParameter: ``` params: queryParameters: parentLocationId: @=location.id ```
1 parent 10d7b96 commit 84d6c9f

1 file changed

Lines changed: 15 additions & 8 deletions

File tree

eZ/Publish/Core/MVC/Symfony/Controller/Content/QueryController.php

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
99
use eZ\Publish\Core\MVC\Symfony\View\ContentView;
1010
use eZ\Publish\Core\QueryType\QueryTypeRegistry;
11+
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
1112

1213
class QueryController
1314
{
@@ -46,7 +47,7 @@ public function contentInfoAction(ContentView $view)
4647
}
4748

4849
/**
49-
* Returns the query configured in the view parameters
50+
* Returns the query configured in the view parameters.
5051
*
5152
* @param \eZ\Publish\Core\MVC\Symfony\View\ContentView $view
5253
*
@@ -58,17 +59,23 @@ private function getQuery(ContentView $view)
5859
if (!$view->hasParameter('query')) {
5960
throw new InvalidArgumentException('query', 'Missing required query parameter');
6061
}
61-
$queryType = $this->queryTypeRegistry->getQueryType($view->getParameter('queryType'));
62+
$queryType = $this->queryTypeRegistry->getQueryType($view->getParameter('query'));
6263

63-
$queryParameters = $view->hasParameter('queryParameters') ? $view->getParameter('query_parameters') : [];
64+
$queryParameters = $view->hasParameter('queryParameters') ? $view->getParameter('queryParameters') : [];
6465
$supportedQueryParameters = array_flip($queryType->getSupportedParameters());
65-
foreach (array_keys($queryParameters) as $queryParameterName) {
66-
if (!isset( $supportedQueryParameters[$queryParameterName] )) {
67-
throw new InvalidArgumentException('query parameters',
68-
"unsupported query parameter $queryParameterName");
66+
foreach ($queryParameters as $queryParameterName => $queryParameterValue) {
67+
if (!isset($supportedQueryParameters[$queryParameterName])) {
68+
throw new InvalidArgumentException("parameter $queryParameterName", 'unsupported query parameter');
69+
}
70+
if (substr($queryParameterValue, 0, 2) == '@=') {
71+
$language = new ExpressionLanguage();
72+
$queryParameters[$queryParameterName] = $language->evaluate(
73+
substr($queryParameterValue, 2),
74+
['view' => $view, 'location' => $view->getLocation(), 'content' => $view->getContent()]
75+
);
6976
}
7077
}
7178

7279
return $queryType->getQuery($queryParameters);
73-
}
80+
}
7481
}

0 commit comments

Comments
 (0)