1212namespace Translation \Bundle \Controller ;
1313
1414use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
15+ use Symfony \Component \HttpFoundation \RedirectResponse ;
1516use Symfony \Component \HttpFoundation \Request ;
1617use Symfony \Component \HttpFoundation \Response ;
1718use Symfony \Component \HttpKernel \Profiler \Profiler ;
19+ use Symfony \Component \Routing \Exception \RouteNotFoundException ;
1820use Symfony \Component \Translation \DataCollector \TranslationDataCollector ;
1921use Symfony \Component \Translation \DataCollectorTranslator ;
2022use Symfony \Component \VarDumper \Cloner \Data ;
2830class SymfonyProfilerController extends AbstractController
2931{
3032 private $ storage ;
33+ /**
34+ * @var Profiler An optional dependency
35+ */
3136 private $ profiler ;
3237 private $ isToolbarAllowEdit ;
3338
34- public function __construct (StorageService $ storage , Profiler $ profiler , bool $ isToolbarAllowEdit )
39+ public function __construct (StorageService $ storage , bool $ isToolbarAllowEdit )
3540 {
3641 $ this ->storage = $ storage ;
37- $ this ->profiler = $ profiler ;
3842 $ this ->isToolbarAllowEdit = $ isToolbarAllowEdit ;
3943 }
4044
@@ -45,7 +49,7 @@ public function editAction(Request $request, string $token): Response
4549 }
4650
4751 if (!$ request ->isXmlHttpRequest ()) {
48- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
52+ return $ this ->redirectToProfiler ( $ token );
4953 }
5054
5155 $ message = $ this ->getMessage ($ request , $ token );
@@ -69,7 +73,7 @@ public function editAction(Request $request, string $token): Response
6973 public function syncAction (Request $ request , string $ token ): Response
7074 {
7175 if (!$ request ->isXmlHttpRequest ()) {
72- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
76+ return $ this ->redirectToProfiler ( $ token );
7377 }
7478
7579 $ sfMessage = $ this ->getMessage ($ request , $ token );
@@ -88,7 +92,7 @@ public function syncAction(Request $request, string $token): Response
8892 public function syncAllAction (Request $ request , string $ token ): Response
8993 {
9094 if (!$ request ->isXmlHttpRequest ()) {
91- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
95+ return $ this ->redirectToProfiler ( $ token );
9296 }
9397
9498 $ this ->storage ->sync ();
@@ -104,7 +108,7 @@ public function syncAllAction(Request $request, string $token): Response
104108 public function createAssetsAction (Request $ request , string $ token ): Response
105109 {
106110 if (!$ request ->isXmlHttpRequest ()) {
107- return $ this ->redirectToRoute ( ' _profiler ' , [ ' token ' => $ token] );
111+ return $ this ->redirectToProfiler ( $ token );
108112 }
109113
110114 $ messages = $ this ->getSelectedMessages ($ request , $ token );
@@ -123,7 +127,7 @@ public function createAssetsAction(Request $request, string $token): Response
123127
124128 private function getMessage (Request $ request , string $ token ): SfProfilerMessage
125129 {
126- $ this ->profiler ->disable ();
130+ $ this ->getProfiler () ->disable ();
127131
128132 $ messageId = (string ) $ request ->request ->get ('message_id ' , $ request ->query ->get ('message_id ' ));
129133
@@ -136,7 +140,7 @@ private function getMessage(Request $request, string $token): SfProfilerMessage
136140
137141 if (DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK === $ message ->getState ()) {
138142 /** @var \Symfony\Component\HttpKernel\DataCollector\RequestDataCollector */
139- $ requestCollector = $ this ->profiler ->loadProfile ($ token )->getCollector ('request ' );
143+ $ requestCollector = $ this ->getProfiler () ->loadProfile ($ token )->getCollector ('request ' );
140144
141145 $ message
142146 ->setLocale ($ requestCollector ->getLocale ())
@@ -152,7 +156,7 @@ private function getMessage(Request $request, string $token): SfProfilerMessage
152156 */
153157 protected function getSelectedMessages (Request $ request , string $ token ): array
154158 {
155- $ this ->profiler ->disable ();
159+ $ this ->getProfiler () ->disable ();
156160
157161 /** @var string[] $selected */
158162 $ selected = (array ) $ request ->request ->get ('selected ' );
@@ -172,7 +176,7 @@ protected function getSelectedMessages(Request $request, string $token): array
172176
173177 private function getMessages (string $ token , string $ profileName = 'translation ' ): array
174178 {
175- $ profile = $ this ->profiler ->loadProfile ($ token );
179+ $ profile = $ this ->getProfiler () ->loadProfile ($ token );
176180
177181 if (null === $ dataCollector = $ profile ->getCollector ($ profileName )) {
178182 throw $ this ->createNotFoundException ("No collector with name \"$ profileName \" was found. " );
@@ -189,4 +193,27 @@ private function getMessages(string $token, string $profileName = 'translation')
189193
190194 return $ messages ;
191195 }
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+ }
192219}
0 commit comments