‪TYPO3CMS  ‪main
PageArguments.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
21 
26 {
27  protected int ‪$pageId;
28  protected string ‪$pageType;
29  protected bool ‪$dirty = false;
30 
36  protected array ‪$arguments;
37 
45  protected array ‪$staticArguments;
46 
53  protected array ‪$dynamicArguments;
54 
60  protected array ‪$routeArguments;
61 
67  protected array ‪$queryArguments = [];
68 
69  public function ‪__construct(int ‪$pageId, string ‪$pageType, array ‪$routeArguments, array ‪$staticArguments = [], array $remainingArguments = [])
70  {
71  $this->pageId = ‪$pageId;
72  $this->pageType = ‪$pageType;
73  $this->‪routeArguments = $this->‪sort($routeArguments);
74  $this->‪staticArguments = $this->‪sort($staticArguments);
77  if (!empty($remainingArguments)) {
78  $this->‪updateQueryArguments($remainingArguments);
79  }
80  }
81 
82  public function ‪areDirty(): bool
83  {
84  return ‪$this->dirty;
85  }
86 
90  public function getRouteArguments(): array
91  {
93  }
94 
95  public function ‪getPageId(): int
96  {
97  return ‪$this->pageId;
98  }
99 
100  public function ‪getPageType(): string
101  {
102  return ‪$this->pageType;
103  }
104 
108  public function get(string $name): mixed
109  {
110  return $this->‪arguments[$name] ?? null;
111  }
112 
116  public function getArguments(): array
117  {
119  }
120 
124  public function getStaticArguments(): array
125  {
127  }
128 
132  public function getDynamicArguments(): array
133  {
135  }
136 
140  public function getQueryArguments(): array
141  {
143  }
144 
148  protected function ‪updateQueryArguments(array ‪$queryArguments)
149  {
150  ‪$queryArguments = $this->‪sort($queryArguments);
151  if ($this->‪queryArguments === $queryArguments) {
152  return;
153  }
154  // in case query arguments would override route arguments,
155  // the state is considered as dirty (since it's not distinct)
156  // thus, route arguments take precedence over query arguments
157  $additionalQueryArguments = $this->‪diff($queryArguments, $this->‪routeArguments);
158  $dirty = $additionalQueryArguments !== ‪$queryArguments;
159  $this->dirty = $this->dirty || ‪$dirty;
161  $this->‪arguments = array_replace_recursive($this->‪arguments, $additionalQueryArguments);
162  $this->‪updateDynamicArguments();
163  }
164 
168  protected function ‪updateDynamicArguments(): void
169  {
170  $this->‪dynamicArguments = $this->‪diff(
171  $this->‪arguments,
172  $this->‪staticArguments
173  );
174  }
175 
181  protected function ‪clean(array $array): array
182  {
183  foreach ($array as $key => &$item) {
184  if (!is_array($item)) {
185  continue;
186  }
187  if (!empty($item)) {
188  $item = $this->‪clean($item);
189  }
190  if (empty($item)) {
191  unset($array[$key]);
192  }
193  }
194  return $array;
195  }
196 
202  protected function ‪sort(array $array): array
203  {
204  $array = $this->‪clean($array);
205  ArrayUtility::naturalKeySortRecursive($array);
206  return $array;
207  }
208 
215  protected function ‪diff(array $first, array $second): array
216  {
217  return ArrayUtility::arrayDiffKeyRecursive($first, $second);
218  }
219 
220  public function ‪offsetExists(mixed $offset): bool
221  {
222  return $offset === 'pageId' || $offset === 'pageType' || isset($this->‪arguments[$offset]);
223  }
224 
228  public function offsetGet(mixed $offset): mixed
229  {
230  if ($offset === 'pageId') {
231  return $this->‪getPageId();
232  }
233  if ($offset === 'pageType') {
234  return $this->‪getPageType();
235  }
236  return $this->‪arguments[$offset] ?? null;
237  }
238 
239  public function ‪offsetSet(mixed $offset, mixed $value): void
240  {
241  throw new \InvalidArgumentException('PageArguments cannot be modified.', 1538152266);
242  }
243 
244  public function ‪offsetUnset(mixed $offset): void
245  {
246  throw new \InvalidArgumentException('PageArguments cannot be modified.', 1538152269);
247  }
248 }
‪TYPO3\CMS\Core\Routing\PageArguments\diff
‪diff(array $first, array $second)
Definition: PageArguments.php:215
‪TYPO3\CMS\Core\Routing\PageArguments\$staticArguments
‪array $staticArguments
Definition: PageArguments.php:45
‪TYPO3\CMS\Core\Routing\PageArguments
Definition: PageArguments.php:26
‪TYPO3\CMS\Core\Routing\RouteResultInterface
Definition: RouteResultInterface.php:23
‪TYPO3\CMS\Core\Routing\PageArguments\__construct
‪__construct(int $pageId, string $pageType, array $routeArguments, array $staticArguments=[], array $remainingArguments=[])
Definition: PageArguments.php:69
‪TYPO3\CMS\Core\Routing\PageArguments\getPageId
‪getPageId()
Definition: PageArguments.php:95
‪TYPO3\CMS\Core\Routing\PageArguments\routeArguments
‪array< string, function getRouteArguments():array { return $this-> routeArguments
Definition: PageArguments.php:92
‪TYPO3\CMS\Core\Routing
‪TYPO3\CMS\Core\Routing\PageArguments\$arguments
‪array $arguments
Definition: PageArguments.php:36
‪TYPO3\CMS\Core\Routing\PageArguments\areDirty
‪areDirty()
Definition: PageArguments.php:82
‪TYPO3\CMS\Core\Routing\PageArguments\sort
‪sort(array $array)
Definition: PageArguments.php:202
‪TYPO3\CMS\Core\Routing\PageArguments\arguments
‪array< string, function getArguments():array { return $this-> arguments
Definition: PageArguments.php:118
‪TYPO3\CMS\Core\Routing\PageArguments\offsetSet
‪offsetSet(mixed $offset, mixed $value)
Definition: PageArguments.php:239
‪TYPO3\CMS\Core\Routing\PageArguments\offsetUnset
‪offsetUnset(mixed $offset)
Definition: PageArguments.php:244
‪TYPO3\CMS\Core\Routing\PageArguments\dynamicArguments
‪array< string, function getDynamicArguments():array { return $this-> dynamicArguments
Definition: PageArguments.php:134
‪TYPO3\CMS\Core\Routing\PageArguments\$dirty
‪bool $dirty
Definition: PageArguments.php:29
‪TYPO3\CMS\Core\Routing\PageArguments\getPageId
‪string array< string, offsetGet(mixed $offset):mixed { if( $offset==='pageId') { return $this-> getPageId()
‪TYPO3\CMS\Core\Routing\PageArguments\$routeArguments
‪array $routeArguments
Definition: PageArguments.php:60
‪TYPO3\CMS\Core\Routing\PageArguments\updateDynamicArguments
‪updateDynamicArguments()
Definition: PageArguments.php:168
‪TYPO3\CMS\Core\Routing\PageArguments\offsetExists
‪offsetExists(mixed $offset)
Definition: PageArguments.php:220
‪TYPO3\CMS\Core\Routing\PageArguments\$pageId
‪int $pageId
Definition: PageArguments.php:27
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪TYPO3\CMS\Core\Routing\PageArguments\queryArguments
‪array< string, function getQueryArguments():array { return $this-> queryArguments
Definition: PageArguments.php:142
‪TYPO3\CMS\Core\Routing\PageArguments\$dynamicArguments
‪array $dynamicArguments
Definition: PageArguments.php:53
‪TYPO3\CMS\Core\Routing\PageArguments\updateQueryArguments
‪updateQueryArguments(array $queryArguments)
Definition: PageArguments.php:148
‪TYPO3\CMS\Core\Routing\PageArguments\getPageType
‪getPageType()
Definition: PageArguments.php:100
‪TYPO3\CMS\Core\Routing\PageArguments\staticArguments
‪array< string, function getStaticArguments():array { return $this-> staticArguments
Definition: PageArguments.php:126
‪TYPO3\CMS\Core\Routing\PageArguments\clean
‪clean(array $array)
Definition: PageArguments.php:181
‪TYPO3\CMS\Core\Routing\PageArguments\$queryArguments
‪array $queryArguments
Definition: PageArguments.php:67
‪TYPO3\CMS\Core\Routing\PageArguments\$pageType
‪string $pageType
Definition: PageArguments.php:28