|
31 | 31 | * tableName: tx_vierwdexample_domain_model_project
|
32 | 32 | * routeFieldPattern: '^(?P<title>.+)-(?P<uid>\d+)$'
|
33 | 33 | * routeFieldResult: '{title}-{uid}'
|
| 34 | + * matchFields: ['uid'] |
34 | 35 | */
|
35 | 36 | class AutomaticSlugPatternMapper extends PersistedPatternMapper {
|
36 | 37 |
|
37 | 38 | use SiteLanguageAwareTrait;
|
38 | 39 |
|
| 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 | + |
39 | 48 | protected function createRouteResult(?array $result): ?string {
|
40 | 49 | if ($result === null) {
|
41 | 50 | return $result;
|
@@ -63,12 +72,16 @@ protected function createRouteResult(?array $result): ?string {
|
63 | 72 | * @return array
|
64 | 73 | */
|
65 | 74 | 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 |
67 | 78 | return parent::createFieldConstraints($queryBuilder, $values, $resolveExpansion);
|
68 | 79 | }
|
69 | 80 |
|
70 | 81 | $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 | + } |
72 | 85 |
|
73 | 86 | return $constraints;
|
74 | 87 | }
|
|
0 commit comments