‪TYPO3CMS  11.5
RequestBuilderTest.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 
20 use Psr\Http\Message\ServerRequestInterface;
32 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
33 
34 class ‪RequestBuilderTest extends FunctionalTestCase
35 {
39  public function ‪buildBuildsARequestInterfaceObject(): void
40  {
41  $extensionName = 'blog_example';
42  $pluginName = 'blog';
43 
44  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
45  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
46  'alias' => 'BlogController',
47  'actions' => [
48  'list',
49  ],
50  ];
51 
52  $configuration = [];
53  $configuration['extensionName'] = $extensionName;
54  $configuration['pluginName'] = $pluginName;
55 
56  $configurationManager = $this->get(ConfigurationManager::class);
57  $configurationManager->setConfiguration($configuration);
58 
59  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
60  $requestBuilder = $this->get(RequestBuilder::class);
61  $request = $requestBuilder->build($mainRequest);
62 
63  self::assertInstanceOf(RequestInterface::class, $request);
64  self::assertSame('html', $request->getFormat());
65  }
66 
71  {
72  $extensionName = 'blog_example';
73  $pluginName = 'blog';
74 
75  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
76  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
77  'alias' => 'BlogController',
78  'actions' => [
79  'list',
80  ],
81  ];
82 
83  $configuration = [];
84  $configuration['extensionName'] = $extensionName;
85  $configuration['pluginName'] = $pluginName;
86  $configuration['format'] = 'json';
87 
88  $configurationManager = $this->get(ConfigurationManager::class);
89  $configurationManager->setConfiguration($configuration);
90 
91  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
92  $requestBuilder = $this->get(RequestBuilder::class);
93  $request = $requestBuilder->build($mainRequest);
94 
95  self::assertInstanceOf(RequestInterface::class, $request);
96  self::assertSame('json', $request->getFormat());
97  }
98 
103  {
104  $extensionName = 'blog_example';
105  $pluginName = 'blog';
106 
107  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
108  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
109  'alias' => 'BlogController',
110  'actions' => [
111  'list',
112  ],
113  ];
114 
115  $configuration = [];
116  $configuration['extensionName'] = $extensionName;
117  $configuration['pluginName'] = $pluginName;
118 
119  $configurationManager = $this->get(ConfigurationManager::class);
120  $configurationManager->setConfiguration($configuration);
121 
122  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
123  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['format' => 'json']]);
124  $requestBuilder = $this->get(RequestBuilder::class);
125  $request = $requestBuilder->build($mainRequest);
126 
127  self::assertInstanceOf(RequestInterface::class, $request);
128  self::assertSame('json', $request->getFormat());
129  }
130 
135  {
136  $this->expectException(Exception::class);
137  $this->expectExceptionCode(1289843275);
138  $this->expectExceptionMessage('"extensionName" is not properly configured. Request can\'t be dispatched!');
139 
140  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
141  $requestBuilder = $this->get(RequestBuilder::class);
142  $requestBuilder->build($mainRequest);
143  }
144 
149  {
150  $this->expectException(Exception::class);
151  $this->expectExceptionCode(1289843277);
152  $this->expectExceptionMessage('"pluginName" is not properly configured. Request can\'t be dispatched!');
153 
154  $configurationManager = $this->get(ConfigurationManager::class);
155  $configurationManager->setConfiguration(['extensionName' => 'blog_example']);
156 
157  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
158  $requestBuilder = $this->get(RequestBuilder::class);
159  $requestBuilder->build($mainRequest);
160  }
161 
166  {
167  $_FILES['tx_blog_example_blog'] = [
168  'name' => 'name.pdf',
169  'type' => 'application/pdf',
170  'tmp_name' => '/tmp/php/php1h4j1o',
171  'error' => UPLOAD_ERR_OK,
172  'size' => 98174,
173  ];
174 
175  $extensionName = 'blog_example';
176  $pluginName = 'blog';
177 
178  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
179  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
180  'alias' => 'BlogController',
181  'actions' => [
182  'list',
183  ],
184  ];
185 
186  $configuration = [];
187  $configuration['extensionName'] = $extensionName;
188  $configuration['pluginName'] = $pluginName;
189 
190  $configurationManager = $this->get(ConfigurationManager::class);
191  $configurationManager->setConfiguration($configuration);
192 
193  $mainRequest = $this->‪prepareServerRequest('https://example.com/', 'POST');
194  $requestBuilder = $this->get(RequestBuilder::class);
195  $request = $requestBuilder->build($mainRequest);
196 
197  self::assertInstanceOf(RequestInterface::class, $request);
198  self::assertSame('name.pdf', $request->getArgument('name'));
199  self::assertSame('application/pdf', $request->getArgument('type'));
200  self::assertSame('/tmp/php/php1h4j1o', $request->getArgument('tmp_name'));
201  self::assertSame(UPLOAD_ERR_OK, $request->getArgument('error'));
202  self::assertSame(98174, $request->getArgument('size'));
203  }
204 
209  {
210  $_FILES['tx_blog_example_blog'] = [
211  'error' => [
212  'pdf' => UPLOAD_ERR_OK,
213  'jpg' => UPLOAD_ERR_OK,
214  ],
215  'name' => [
216  'pdf' => 'name.pdf',
217  'jpg' => 'name.jpg',
218  ],
219  'type' => [
220  'pdf' => 'application/pdf',
221  'jpg' => 'image/jpg',
222  ],
223  'tmp_name' => [
224  'pdf' => '/tmp/php/php1h4j1o',
225  'jpg' => '/tmp/php/php6hst32',
226  ],
227  'size' => [
228  'pdf' => 98174,
229  ],
230  ];
231 
232  $extensionName = 'blog_example';
233  $pluginName = 'blog';
234 
235  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
236  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
237  'alias' => 'BlogController',
238  'actions' => [
239  'list',
240  ],
241  ];
242 
243  $configuration = [];
244  $configuration['extensionName'] = $extensionName;
245  $configuration['pluginName'] = $pluginName;
246 
247  $configurationManager = $this->get(ConfigurationManager::class);
248  $configurationManager->setConfiguration($configuration);
249 
250  $mainRequest = $this->‪prepareServerRequest('https://example.com/', 'POST');
251  $requestBuilder = $this->get(RequestBuilder::class);
252  $request = $requestBuilder->build($mainRequest);
253 
254  self::assertInstanceOf(RequestInterface::class, $request);
255 
256  $argument = $request->getArgument('pdf');
257  self::assertIsArray($argument);
258  self::assertSame('name.pdf', $argument['name']);
259  self::assertSame('application/pdf', $argument['type']);
260  self::assertSame('/tmp/php/php1h4j1o', $argument['tmp_name']);
261  self::assertSame(UPLOAD_ERR_OK, $argument['error']);
262  self::assertSame(98174, $argument['size']);
263 
264  $argument = $request->getArgument('jpg');
265  self::assertIsArray($argument);
266  self::assertSame('name.jpg', $argument['name']);
267  self::assertSame('image/jpg', $argument['type']);
268  self::assertSame('/tmp/php/php6hst32', $argument['tmp_name']);
269  self::assertSame(UPLOAD_ERR_OK, $argument['error']);
270  self::assertNotTrue(isset($argument['size']));
271  }
272 
277  {
278  $this->expectException(InvalidControllerNameException::class);
279  $this->expectExceptionCode(1313855173);
280  $this->expectExceptionMessage('The controller "NonExistentController" is not allowed by plugin "blog". Please check for TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php.');
281 
282  $_GET['tx_blog_example_blog']['controller'] = 'NonExistentController';
283 
284  $extensionName = 'blog_example';
285  $pluginName = 'blog';
286 
287  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
288  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
289  'alias' => 'BlogController',
290  'actions' => [
291  'list',
292  ],
293  ];
294 
295  $configuration = [];
296  $configuration['extensionName'] = $extensionName;
297  $configuration['pluginName'] = $pluginName;
298 
299  $configurationManager = $this->get(ConfigurationManager::class);
300  $configurationManager->setConfiguration($configuration);
301 
302  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
303  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['controller' => 'NonExistentController']]);
304  $requestBuilder = $this->get(RequestBuilder::class);
305  $requestBuilder->build($mainRequest);
306  }
307 
312  {
313  $this->expectException(PageNotFoundException::class);
314  $this->expectExceptionCode(1313857897);
315  $this->expectExceptionMessage('The requested resource was not found');
316 
317  $extensionName = 'blog_example';
318  $pluginName = 'blog';
319 
320  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
321  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
322  'alias' => 'BlogController',
323  'actions' => [
324  'list',
325  ],
326  ];
327 
328  $configuration = [];
329  $configuration['extensionName'] = $extensionName;
330  $configuration['pluginName'] = $pluginName;
331  $configuration['mvc']['throwPageNotFoundExceptionIfActionCantBeResolved'] = true;
332 
333  $configurationManager = $this->get(ConfigurationManager::class);
334  $configurationManager->setConfiguration($configuration);
335 
336  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
337  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['controller' => 'NonExistentController']]);
338  $requestBuilder = $this->get(RequestBuilder::class);
339  $requestBuilder->build($mainRequest);
340  }
341 
346  {
347  $this->expectException(Exception::class);
348  $this->expectExceptionCode(1316104317);
349  $this->expectExceptionMessage('The default controller for extension "blog_example" and plugin "blog" can not be determined. Please check for TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php.');
350 
351  $extensionName = 'blog_example';
352  $pluginName = 'blog';
353 
354  $configuration = [];
355  $configuration['extensionName'] = $extensionName;
356  $configuration['pluginName'] = $pluginName;
357 
358  $configurationManager = $this->get(ConfigurationManager::class);
359  $configurationManager->setConfiguration($configuration);
360 
361  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
362  $requestBuilder = $this->get(RequestBuilder::class);
363  $requestBuilder->build($mainRequest);
364  }
365 
370  {
371  $extensionName = 'blog_example';
372  $pluginName = 'blog';
373 
374  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
375  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
376  'alias' => 'BlogController',
377  'actions' => [
378  'list',
379  ],
380  ];
381 
382  $configuration = [];
383  $configuration['extensionName'] = $extensionName;
384  $configuration['pluginName'] = $pluginName;
385  $configuration['mvc']['callDefaultActionIfActionCantBeResolved'] = true;
386 
387  $configurationManager = $this->get(ConfigurationManager::class);
388  $configurationManager->setConfiguration($configuration);
389 
390  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
391  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['controller' => 'NonExistentController']]);
392  $requestBuilder = $this->get(RequestBuilder::class);
393  $request = $requestBuilder->build($mainRequest);
394 
395  self::assertInstanceOf(RequestInterface::class, $request);
396  self::assertSame('BlogController', $request->getControllerName());
397  }
398 
403  {
404  $extensionName = 'blog_example';
405  $pluginName = 'blog';
406 
407  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers'] = [
408  'ExtbaseTeam\BlogExample\Controller\BlogController' => [
409  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
410  'alias' => 'BlogController',
411  'actions' => [
412  'list',
413  ],
414  ],
415  'ExtbaseTeam\BlogExample\Controller\UserController' => [
416  'className' => 'ExtbaseTeam\BlogExample\Controller\UserController',
417  'alias' => 'UserController',
418  'actions' => [
419  'list',
420  ],
421  ],
422  ];
423 
424  $configuration = [];
425  $configuration['extensionName'] = $extensionName;
426  $configuration['pluginName'] = $pluginName;
427 
428  $configurationManager = $this->get(ConfigurationManager::class);
429  $configurationManager->setConfiguration($configuration);
430 
431  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
432  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['controller' => 'UserController']]);
433  $requestBuilder = $this->get(RequestBuilder::class);
434  $request = $requestBuilder->build($mainRequest);
435 
436  self::assertInstanceOf(RequestInterface::class, $request);
437  self::assertSame('UserController', $request->getControllerName());
438  }
439 
444  {
445  $this->expectException(InvalidActionNameException::class);
446  $this->expectExceptionCode(1313855175);
447  $this->expectExceptionMessage('The action "NonExistentAction" (controller "ExtbaseTeam\BlogExample\Controller\BlogController") is not allowed by this plugin / module. Please check TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php / TYPO3\CMS\Extbase\Utility\ExtensionUtility::configureModule() in your ext_tables.php.');
448 
449  $extensionName = 'blog_example';
450  $pluginName = 'blog';
451 
452  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
453  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
454  'alias' => 'BlogController',
455  'actions' => [
456  'list',
457  ],
458  ];
459 
460  $configuration = [];
461  $configuration['extensionName'] = $extensionName;
462  $configuration['pluginName'] = $pluginName;
463 
464  $configurationManager = $this->get(ConfigurationManager::class);
465  $configurationManager->setConfiguration($configuration);
466 
467  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
468  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['action' => 'NonExistentAction']]);
469  $requestBuilder = $this->get(RequestBuilder::class);
470  $requestBuilder->build($mainRequest);
471  }
472 
477  {
478  $this->expectException(PageNotFoundException::class);
479  $this->expectExceptionCode(1313857898);
480  $this->expectExceptionMessage('The requested resource was not found');
481 
482  $extensionName = 'blog_example';
483  $pluginName = 'blog';
484 
485  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
486  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
487  'alias' => 'BlogController',
488  'actions' => [
489  'list',
490  ],
491  ];
492 
493  $configuration = [];
494  $configuration['extensionName'] = $extensionName;
495  $configuration['pluginName'] = $pluginName;
496  $configuration['mvc']['throwPageNotFoundExceptionIfActionCantBeResolved'] = true;
497 
498  $configurationManager = $this->get(ConfigurationManager::class);
499  $configurationManager->setConfiguration($configuration);
500 
501  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
502  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['action' => 'NonExistentAction']]);
503  $requestBuilder = $this->get(RequestBuilder::class);
504  $requestBuilder->build($mainRequest);
505  }
506 
511  {
512  $extensionName = 'blog_example';
513  $pluginName = 'blog';
514 
515  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers']['ExtbaseTeam\BlogExample\Controller\BlogController'] = [
516  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
517  'alias' => 'BlogController',
518  'actions' => [
519  'list',
520  ],
521  ];
522 
523  $configuration = [];
524  $configuration['extensionName'] = $extensionName;
525  $configuration['pluginName'] = $pluginName;
526  $configuration['mvc']['callDefaultActionIfActionCantBeResolved'] = true;
527 
528  $configurationManager = $this->get(ConfigurationManager::class);
529  $configurationManager->setConfiguration($configuration);
530 
531  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
532  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['action' => 'NonExistentAction']]);
533  $requestBuilder = $this->get(RequestBuilder::class);
534  $request = $requestBuilder->build($mainRequest);
535 
536  self::assertInstanceOf(RequestInterface::class, $request);
537  self::assertSame('list', $request->getControllerActionName());
538  }
539 
544  {
545  $extensionName = 'blog_example';
546  $pluginName = 'blog';
547 
548  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers'] = [
549  'ExtbaseTeam\BlogExample\Controller\BlogController' => [
550  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
551  'alias' => 'BlogController',
552  'actions' => [
553  'list', 'show',
554  ],
555  ],
556  ];
557 
558  $configuration = [];
559  $configuration['extensionName'] = $extensionName;
560  $configuration['pluginName'] = $pluginName;
561 
562  $configurationManager = $this->get(ConfigurationManager::class);
563  $configurationManager->setConfiguration($configuration);
564 
565  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
566  $mainRequest = $mainRequest->withQueryParams(['tx_blog_example_blog' => ['action' => 'show']]);
567  $requestBuilder = $this->get(RequestBuilder::class);
568  $request = $requestBuilder->build($mainRequest);
569 
570  self::assertInstanceOf(RequestInterface::class, $request);
571  self::assertSame('show', $request->getControllerActionName());
572  }
573 
578  {
579  $this->expectException(Exception::class);
580  $this->expectExceptionCode(1295479651);
581  $this->expectExceptionMessage('The default action can not be determined for controller "ExtbaseTeam\BlogExample\Controller\BlogController". Please check TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php.');
582 
583  $extensionName = 'blog_example';
584  $pluginName = 'blog';
585 
586  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers'] = [
587  'ExtbaseTeam\BlogExample\Controller\BlogController' => [
588  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
589  'alias' => 'BlogController',
590  ],
591  ];
592 
593  $configuration = [];
594  $configuration['extensionName'] = $extensionName;
595  $configuration['pluginName'] = $pluginName;
596 
597  $configurationManager = $this->get(ConfigurationManager::class);
598  $configurationManager->setConfiguration($configuration);
599 
600  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
601  $requestBuilder = $this->get(RequestBuilder::class);
602  $requestBuilder->build($mainRequest);
603  }
604 
609  {
610  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
611  $mainRequest = $mainRequest
612  ->withQueryParams(['tx_blog_example_blog' => ['action' => 'show']])
613  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
614 
615  $extensionName = 'blog_example';
616  $pluginName = 'blog';
617 
618  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers'] = [
619  'ExtbaseTeam\BlogExample\Controller\BlogController' => [
620  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
621  'alias' => 'BlogController',
622  'actions' => [
623  'list', 'show',
624  ],
625  ],
626  ];
627 
628  $configuration = [];
629  $configuration['extensionName'] = $extensionName;
630  $configuration['pluginName'] = $pluginName;
631 
632  $configurationManager = $this->get(ConfigurationManager::class);
633  $configurationManager->setConfiguration($configuration);
634 
635  $requestBuilder = $this->get(RequestBuilder::class);
636  $request = $requestBuilder->build($mainRequest);
637 
638  self::assertInstanceOf(RequestInterface::class, $request);
639  self::assertSame('show', $request->getControllerActionName());
640  }
641 
646  {
647  $pageArguments = new ‪PageArguments(1, '0', ['tx_blog_example_blog' => ['action' => 'show']]);
648 
649  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
650  $mainRequest = $mainRequest
651  ->withAttribute('routing', $pageArguments)
652  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
653 
654  $extensionName = 'blog_example';
655  $pluginName = 'blog';
656 
657  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers'] = [
658  'ExtbaseTeam\BlogExample\Controller\BlogController' => [
659  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
660  'alias' => 'BlogController',
661  'actions' => [
662  'list', 'show',
663  ],
664  ],
665  ];
666 
667  $configuration = [];
668  $configuration['extensionName'] = $extensionName;
669  $configuration['pluginName'] = $pluginName;
670 
671  $configurationManager = $this->get(ConfigurationManager::class);
672  $configurationManager->setConfiguration($configuration);
673 
674  $requestBuilder = $this->get(RequestBuilder::class);
675  $request = $requestBuilder->build($mainRequest);
676 
677  self::assertInstanceOf(RequestInterface::class, $request);
678  self::assertSame('show', $request->getControllerActionName());
679  }
680 
685  {
686  $mainRequest = $this->‪prepareServerRequest('https://example.com/', 'POST');
687  $mainRequest = $mainRequest
688  ->withParsedBody(['tx_blog_example_blog' => ['action' => 'show']])
689  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
690 
691  $extensionName = 'blog_example';
692  $pluginName = 'blog';
693 
694  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers'] = [
695  'ExtbaseTeam\BlogExample\Controller\BlogController' => [
696  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
697  'alias' => 'BlogController',
698  'actions' => [
699  'list', 'show',
700  ],
701  ],
702  ];
703 
704  $configuration = [];
705  $configuration['extensionName'] = $extensionName;
706  $configuration['pluginName'] = $pluginName;
707 
708  $configurationManager = $this->get(ConfigurationManager::class);
709  $configurationManager->setConfiguration($configuration);
710 
711  $requestBuilder = $this->get(RequestBuilder::class);
712  $request = $requestBuilder->build($mainRequest);
713 
714  self::assertInstanceOf(RequestInterface::class, $request);
715  self::assertSame('show', $request->getControllerActionName());
716  }
717 
722  {
723  $pageArguments = new ‪PageArguments(1, '0', ['tx_blog_example_blog' => 'not_an_array']);
724 
725  $mainRequest = $this->‪prepareServerRequest('https://example.com/');
726  $mainRequest = $mainRequest
727  ->withParsedBody(['tx_blog_example_blog' => ['action' => 'show']])
728  ->withAttribute('routing', $pageArguments)
729  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_FE);
730 
731  $extensionName = 'blog_example';
732  $pluginName = 'blog';
733 
734  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][$extensionName]['modules'][$pluginName]['controllers'] = [
735  'ExtbaseTeam\BlogExample\Controller\BlogController' => [
736  'className' => 'ExtbaseTeam\BlogExample\Controller\BlogController',
737  'alias' => 'BlogController',
738  'actions' => [
739  'list', 'show',
740  ],
741  ],
742  ];
743 
744  $configuration = [];
745  $configuration['extensionName'] = $extensionName;
746  $configuration['pluginName'] = $pluginName;
747  $configurationManager = $this->get(ConfigurationManager::class);
748  $configurationManager->setConfiguration($configuration);
749 
750  $requestBuilder = $this->get(RequestBuilder::class);
751  $request = $requestBuilder->build($mainRequest);
752 
753  self::assertInstanceOf(RequestInterface::class, $request);
754  self::assertSame('list', $request->getControllerActionName());
755  }
756 
757  protected function ‪prepareServerRequest(string $url, $method = 'GET'): ServerRequestInterface
758  {
759  $request = (new ‪ServerRequest($url, $method))
760  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
761  $normalizedParams = ‪NormalizedParams::createFromRequest($request);
762  return $request->withAttribute('normalizedParams', $normalizedParams);
763  }
764 }
‪TYPO3\CMS\Core\Routing\PageArguments
Definition: PageArguments.php:26
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameReturnsActionDefinedViaParametersOfServerRequest
‪resolveActionNameReturnsActionDefinedViaParametersOfServerRequest()
Definition: RequestBuilderTest.php:608
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\loadDefaultValuesThrowsExceptionIfExtensionNameIsNotProperlyConfigured
‪loadDefaultValuesThrowsExceptionIfExtensionNameIsNotProperlyConfigured()
Definition: RequestBuilderTest.php:134
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameThrowsInvalidActionNameExceptionIfNonExistentActionIsSetViaGetParameter
‪resolveActionNameThrowsInvalidActionNameExceptionIfNonExistentActionIsSetViaGetParameter()
Definition: RequestBuilderTest.php:443
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveControllerClassNameThrowsInvalidControllerNameExceptionIfNonExistentControllerIsSetViaGetParameter
‪resolveControllerClassNameThrowsInvalidControllerNameExceptionIfNonExistentControllerIsSetViaGetParameter()
Definition: RequestBuilderTest.php:276
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder
Definition: SystemEnvironmentBuilder.php:41
‪TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException
Definition: InvalidControllerNameException.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveControllerClassNameThrowsPageNotFoundException
‪resolveControllerClassNameThrowsPageNotFoundException()
Definition: RequestBuilderTest.php:311
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_BE
‪const REQUESTTYPE_BE
Definition: SystemEnvironmentBuilder.php:45
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\buildBuildsARequestInterfaceObject
‪buildBuildsARequestInterfaceObject()
Definition: RequestBuilderTest.php:39
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameThrowsAnExceptionIfTheDefaultActionCannotBeDetermined
‪resolveActionNameThrowsAnExceptionIfTheDefaultActionCannotBeDetermined()
Definition: RequestBuilderTest.php:577
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveControllerClassNameReturnsControllerDefinedViaParametersIfControllerIsConfigured
‪resolveControllerClassNameReturnsControllerDefinedViaParametersIfControllerIsConfigured()
Definition: RequestBuilderTest.php:402
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\untangleFilesArrayDetectsMultipleUploadedFile
‪untangleFilesArrayDetectsMultipleUploadedFile()
Definition: RequestBuilderTest.php:208
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManager
Definition: ConfigurationManager.php:33
‪TYPO3\CMS\Core\Error\Http\PageNotFoundException
Definition: PageNotFoundException.php:24
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameReturnsDefaultActionIfCallDefaultActionIfActionCantBeResolvedIsConfigured
‪resolveActionNameReturnsDefaultActionIfCallDefaultActionIfActionCantBeResolvedIsConfigured()
Definition: RequestBuilderTest.php:510
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\silentlyIgnoreInvalidParameterAndUseDefaultAction
‪silentlyIgnoreInvalidParameterAndUseDefaultAction()
Definition: RequestBuilderTest.php:721
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\prepareServerRequest
‪prepareServerRequest(string $url, $method='GET')
Definition: RequestBuilderTest.php:757
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:37
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\untangleFilesArrayDetectsASingleUploadedFile
‪untangleFilesArrayDetectsASingleUploadedFile()
Definition: RequestBuilderTest.php:165
‪TYPO3\CMS\Extbase\Mvc\Exception
Definition: InfiniteLoopException.php:18
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameReturnsActionDefinedViaParametersIfActionIsConfigured
‪resolveActionNameReturnsActionDefinedViaParametersIfActionIsConfigured()
Definition: RequestBuilderTest.php:543
‪TYPO3\CMS\Extbase\Mvc\RequestInterface
Definition: RequestInterface.php:27
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameReturnsActionDefinedViaParsedBodyOfServerRequest
‪resolveActionNameReturnsActionDefinedViaParsedBodyOfServerRequest()
Definition: RequestBuilderTest.php:684
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameThrowsPageNotFoundException
‪resolveActionNameThrowsPageNotFoundException()
Definition: RequestBuilderTest.php:476
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Extbase\Mvc\Exception\InvalidActionNameException
Definition: InvalidActionNameException.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveActionNameReturnsActionDefinedViaPageArgumentOfServerRequest
‪resolveActionNameReturnsActionDefinedViaPageArgumentOfServerRequest()
Definition: RequestBuilderTest.php:645
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web
Definition: RequestBuilderTest.php:18
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\loadDefaultValuesThrowsExceptionIfPluginNameIsNotProperlyConfigured
‪loadDefaultValuesThrowsExceptionIfPluginNameIsNotProperlyConfigured()
Definition: RequestBuilderTest.php:148
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveControllerClassNameThrowsAnExceptionIfTheDefaultControllerCannotBeDetermined
‪resolveControllerClassNameThrowsAnExceptionIfTheDefaultControllerCannotBeDetermined()
Definition: RequestBuilderTest.php:345
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_FE
‪const REQUESTTYPE_FE
Definition: SystemEnvironmentBuilder.php:43
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\resolveControllerClassNameReturnsDefaultControllerIfCallDefaultActionIfActionCantBeResolvedIsConfigured
‪resolveControllerClassNameReturnsDefaultControllerIfCallDefaultActionIfActionCantBeResolvedIsConfigured()
Definition: RequestBuilderTest.php:369
‪TYPO3\CMS\Core\Http\NormalizedParams\createFromRequest
‪static static createFromRequest(ServerRequestInterface $request, array $systemConfiguration=null)
Definition: NormalizedParams.php:843
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\loadDefaultValuesOverridesFormatIfConfigured
‪loadDefaultValuesOverridesFormatIfConfigured()
Definition: RequestBuilderTest.php:70
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest\buildOverridesFormatIfSetInGetParameters
‪buildOverridesFormatIfSetInGetParameters()
Definition: RequestBuilderTest.php:102
‪TYPO3\CMS\Extbase\Tests\Functional\Mvc\Web\RequestBuilderTest
Definition: RequestBuilderTest.php:35
‪TYPO3\CMS\Core\Http\NormalizedParams
Definition: NormalizedParams.php:35
‪TYPO3\CMS\Extbase\Mvc\Web\RequestBuilder
Definition: RequestBuilder.php:37