Skip to content

Commit aebb477

Browse files
committed
Added option to match other fields as uid in routes with AutomaticSlugPatternMapper
1 parent c3dfaf4 commit aebb477

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

Classes/Routing/Aspect/AutomaticSlugPatternMapper.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,20 @@
3131
* tableName: tx_vierwdexample_domain_model_project
3232
* routeFieldPattern: '^(?P<title>.+)-(?P<uid>\d+)$'
3333
* routeFieldResult: '{title}-{uid}'
34+
* matchFields: ['uid']
3435
*/
3536
class AutomaticSlugPatternMapper extends PersistedPatternMapper {
3637

3738
use SiteLanguageAwareTrait;
3839

40+
public function __construct(array $settings) {
41+
parent::__construct($settings);
42+
43+
if (!isset($this->settings['matchFields']) || !is_array($this->settings['matchFields'])) {
44+
$this->settings['matchFields'] = ['uid'];
45+
}
46+
}
47+
3948
protected function createRouteResult(?array $result): ?string {
4049
if ($result === null) {
4150
return $result;
@@ -63,12 +72,16 @@ protected function createRouteResult(?array $result): ?string {
6372
* @return array
6473
*/
6574
protected function createRouteFieldConstraints(QueryBuilder $queryBuilder, array $values, bool $resolveExpansion = false): array {
66-
if (!isset($values['uid'])) {
75+
// check if all match-fields are set
76+
if (count($this->settings['matchFields']) !== count(array_intersect($this->settings['matchFields'], array_keys($values)))) {
77+
// not all fields are set
6778
return parent::createFieldConstraints($queryBuilder, $values, $resolveExpansion);
6879
}
6980

7081
$constraints = [];
71-
$constraints[] = $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($values['uid'], \PDO::PARAM_STR));
82+
foreach ($this->settings['matchFields'] as $fieldName) {
83+
$constraints[] = $queryBuilder->expr()->eq($fieldName, $queryBuilder->createNamedParameter($values[$fieldName], \PDO::PARAM_STR));
84+
}
7285

7386
return $constraints;
7487
}

0 commit comments

Comments
 (0)