Skip to content

Commit 44fb606

Browse files
authored
Make Profiler service an optional argument for SymfonyProfilerController (#440)
1 parent 04c2401 commit 44fb606

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

Diff for: Controller/SymfonyProfilerController.php

+37-10
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
namespace Translation\Bundle\Controller;
1313

1414
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
15+
use Symfony\Component\HttpFoundation\RedirectResponse;
1516
use Symfony\Component\HttpFoundation\Request;
1617
use Symfony\Component\HttpFoundation\Response;
1718
use Symfony\Component\HttpKernel\Profiler\Profiler;
19+
use Symfony\Component\Routing\Exception\RouteNotFoundException;
1820
use Symfony\Component\Translation\DataCollector\TranslationDataCollector;
1921
use Symfony\Component\Translation\DataCollectorTranslator;
2022
use Symfony\Component\VarDumper\Cloner\Data;
@@ -28,13 +30,15 @@
2830
class 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
}

Diff for: Resources/config/symfony_profiler.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ services:
1111
tags: ['container.service_subscriber']
1212
arguments:
1313
- '@Translation\Bundle\Service\StorageService'
14-
- '@profiler'
1514
- '%php_translation.toolbar.allow_edit%'
15+
calls:
16+
- setProfiler: ['@?profiler']

0 commit comments

Comments
 (0)