55use Nette \Application \Response ;
66use Nette \Application \UI \Component ;
77use Nette \Application \UI \Presenter ;
8+ use Nette \Http \IRequest ;
9+ use Nette \Http \IResponse ;
810use Nette \Http \Request as HttpRequest ;
911use Nette \Http \Response as HttpResponse ;
1012use Nette \Http \UrlScript ;
13+ use ReflectionMethod ;
1114
1215final class TestPresenter extends Presenter
1316{
1417
15- public HttpRequest $ httpRequest ;
16-
17- public HttpResponse $ httpResponse ;
18-
1918 public Response $ response ;
2019
2120 private Component $ component ;
@@ -27,10 +26,7 @@ public function __construct(Component $component, ?HttpRequest $request = null,
2726 $ httpRequest = $ request ?? new HttpRequest (new UrlScript ('http://localhost/page ' ));
2827 $ httpResponse = $ response ?? new HttpResponse ();
2928
30- $ this ->injectPrimary (
31- $ httpRequest ,
32- $ httpResponse
33- );
29+ $ this ->injectPrimaryCompat ($ httpRequest , $ httpResponse );
3430 $ this ->component = $ component ;
3531 $ this ->getComponent ('subject ' );
3632 }
@@ -47,4 +43,22 @@ protected function createComponentSubject(): Component
4743 return $ this ->component ;
4844 }
4945
46+ /**
47+ * Compatibility wrapper for injectPrimary across Nette versions
48+ */
49+ private function injectPrimaryCompat (IRequest $ httpRequest , IResponse $ httpResponse ): void
50+ {
51+ $ method = new ReflectionMethod (Presenter::class, 'injectPrimary ' );
52+ $ params = $ method ->getParameters ();
53+ $ firstParamName = $ params [0 ]->getName ();
54+
55+ if ($ firstParamName === 'httpRequest ' ) {
56+ // Nette 3.2.x older signature
57+ $ this ->injectPrimary ($ httpRequest , $ httpResponse );
58+ } else {
59+ // Nette 3.2.x newer signature with $context first
60+ $ this ->injectPrimary (null , $ httpRequest , $ httpResponse );
61+ }
62+ }
63+
5064}
0 commit comments