12
12
namespace Translation \Bundle \Controller ;
13
13
14
14
use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
15
+ use Symfony \Component \HttpFoundation \RedirectResponse ;
15
16
use Symfony \Component \HttpFoundation \Request ;
16
17
use Symfony \Component \HttpFoundation \Response ;
17
18
use Symfony \Component \HttpKernel \Profiler \Profiler ;
19
+ use Symfony \Component \Routing \Exception \RouteNotFoundException ;
18
20
use Symfony \Component \Translation \DataCollector \TranslationDataCollector ;
19
21
use Symfony \Component \Translation \DataCollectorTranslator ;
20
22
use Symfony \Component \VarDumper \Cloner \Data ;
28
30
class SymfonyProfilerController extends AbstractController
29
31
{
30
32
private $ storage ;
33
+ /**
34
+ * @var Profiler An optional dependency
35
+ */
31
36
private $ profiler ;
32
37
private $ isToolbarAllowEdit ;
33
38
34
- public function __construct (StorageService $ storage , Profiler $ profiler , bool $ isToolbarAllowEdit )
39
+ public function __construct (StorageService $ storage , bool $ isToolbarAllowEdit )
35
40
{
36
41
$ this ->storage = $ storage ;
37
- $ this ->profiler = $ profiler ;
38
42
$ this ->isToolbarAllowEdit = $ isToolbarAllowEdit ;
39
43
}
40
44
@@ -45,7 +49,7 @@ public function editAction(Request $request, string $token): Response
45
49
}
46
50
47
51
if (!$ request ->isXmlHttpRequest ()) {
48
- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
52
+ return $ this ->redirectToProfiler ( $ token );
49
53
}
50
54
51
55
$ message = $ this ->getMessage ($ request , $ token );
@@ -69,7 +73,7 @@ public function editAction(Request $request, string $token): Response
69
73
public function syncAction (Request $ request , string $ token ): Response
70
74
{
71
75
if (!$ request ->isXmlHttpRequest ()) {
72
- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
76
+ return $ this ->redirectToProfiler ( $ token );
73
77
}
74
78
75
79
$ sfMessage = $ this ->getMessage ($ request , $ token );
@@ -88,7 +92,7 @@ public function syncAction(Request $request, string $token): Response
88
92
public function syncAllAction (Request $ request , string $ token ): Response
89
93
{
90
94
if (!$ request ->isXmlHttpRequest ()) {
91
- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
95
+ return $ this ->redirectToProfiler ( $ token );
92
96
}
93
97
94
98
$ this ->storage ->sync ();
@@ -104,7 +108,7 @@ public function syncAllAction(Request $request, string $token): Response
104
108
public function createAssetsAction (Request $ request , string $ token ): Response
105
109
{
106
110
if (!$ request ->isXmlHttpRequest ()) {
107
- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
111
+ return $ this ->redirectToProfiler ( $ token );
108
112
}
109
113
110
114
$ messages = $ this ->getSelectedMessages ($ request , $ token );
@@ -123,7 +127,7 @@ public function createAssetsAction(Request $request, string $token): Response
123
127
124
128
private function getMessage (Request $ request , string $ token ): SfProfilerMessage
125
129
{
126
- $ this ->profiler ->disable ();
130
+ $ this ->getProfiler () ->disable ();
127
131
128
132
$ messageId = (string ) $ request ->request ->get ('message_id ' , $ request ->query ->get ('message_id ' ));
129
133
@@ -136,7 +140,7 @@ private function getMessage(Request $request, string $token): SfProfilerMessage
136
140
137
141
if (DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK === $ message ->getState ()) {
138
142
/** @var \Symfony\Component\HttpKernel\DataCollector\RequestDataCollector */
139
- $ requestCollector = $ this ->profiler ->loadProfile ($ token )->getCollector ('request ' );
143
+ $ requestCollector = $ this ->getProfiler () ->loadProfile ($ token )->getCollector ('request ' );
140
144
141
145
$ message
142
146
->setLocale ($ requestCollector ->getLocale ())
@@ -152,7 +156,7 @@ private function getMessage(Request $request, string $token): SfProfilerMessage
152
156
*/
153
157
protected function getSelectedMessages (Request $ request , string $ token ): array
154
158
{
155
- $ this ->profiler ->disable ();
159
+ $ this ->getProfiler () ->disable ();
156
160
157
161
/** @var string[] $selected */
158
162
$ selected = (array ) $ request ->request ->get ('selected ' );
@@ -172,7 +176,7 @@ protected function getSelectedMessages(Request $request, string $token): array
172
176
173
177
private function getMessages (string $ token , string $ profileName = 'translation ' ): array
174
178
{
175
- $ profile = $ this ->profiler ->loadProfile ($ token );
179
+ $ profile = $ this ->getProfiler () ->loadProfile ($ token );
176
180
177
181
if (null === $ dataCollector = $ profile ->getCollector ($ profileName )) {
178
182
throw $ this ->createNotFoundException ("No collector with name \"$ profileName \" was found. " );
@@ -189,4 +193,27 @@ private function getMessages(string $token, string $profileName = 'translation')
189
193
190
194
return $ messages ;
191
195
}
196
+
197
+ public function setProfiler (Profiler $ profiler ): void
198
+ {
199
+ $ this ->profiler = $ profiler ;
200
+ }
201
+
202
+ private function getProfiler (): Profiler
203
+ {
204
+ if (!$ this ->profiler ) {
205
+ throw new \Exception ('The "profiler" service is missing. Please, run "composer require symfony/web-profiler-bundle" first to use this feature. ' );
206
+ }
207
+
208
+ return $ this ->profiler ;
209
+ }
210
+
211
+ private function redirectToProfiler (string $ token ): RedirectResponse
212
+ {
213
+ try {
214
+ return $ this ->redirectToRoute ('_profiler ' , ['token ' => $ token ]);
215
+ } catch (RouteNotFoundException $ e ) {
216
+ throw new \Exception ('Route to profiler page not found. Please, run "composer require symfony/web-profiler-bundle" first to use this feature. ' );
217
+ }
218
+ }
192
219
}
0 commit comments