Skip to content

Commit 4bebdc0

Browse files
committed
Do not use ContainerAwareInterface and trait anymore
1 parent ba8bc07 commit 4bebdc0

2 files changed

Lines changed: 37 additions & 75 deletions

File tree

src/Controller/BackendTreeController.php

Lines changed: 27 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* @author Sven Baumann <baumann.sv@gmail.com>
1616
* @author Kim Wormer <hallo@heartcodiert.de>
1717
* @author Ingolf Steinhardt <info@e-spin.de>
18+
* @author David Molineus <david.molineus@netzmacht.de>
1819
* @copyright 2013-2025 Contao Community Alliance.
1920
* @license https://github.com/contao-community-alliance/dc-general/blob/master/LICENSE LGPL-3.0-or-later
2021
* @filesource
@@ -33,25 +34,19 @@
3334
use ContaoCommunityAlliance\DcGeneral\Factory\DcGeneralFactory;
3435
use ContaoCommunityAlliance\Translator\TranslatorInterface as CcaTranslator;
3536
use Contao\Backend;
36-
use Contao\Config;
3737
use Contao\Controller;
3838
use Contao\CoreBundle\Framework\ContaoFramework;
3939
use Contao\CoreBundle\Picker\PickerBuilderInterface;
4040
use Contao\CoreBundle\Picker\PickerInterface;
41-
use Contao\Environment;
4241
use Contao\StringUtil;
4342
use Contao\Validator;
4443
use Contao\Widget;
4544
use InvalidArgumentException;
46-
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
47-
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
48-
use Symfony\Component\DependencyInjection\ContainerInterface as SymfonyContainerInterface;
4945
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
5046
use Symfony\Component\HttpFoundation\Request;
5147
use Symfony\Component\HttpFoundation\RequestStack;
5248
use Symfony\Component\HttpFoundation\Response;
5349
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBagInterface;
54-
use Symfony\Component\HttpFoundation\Session\SessionInterface;
5550
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
5651
use Symfony\Component\Routing\Attribute\Route;
5752
use Symfony\Contracts\Translation\TranslatorInterface;
@@ -64,15 +59,19 @@
6459
* Handles the backend tree.
6560
*
6661
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
67-
*
68-
* @psalm-suppress DeprecatedInterface
69-
* @psalm-suppress DeprecatedTrait
7062
*/
7163
#[Route("/contao/cca", defaults: ['_scope' => 'backend', '_token_check' => true])]
72-
class BackendTreeController implements ContainerAwareInterface
64+
class BackendTreeController
7365
{
74-
/** @psalm-suppress DeprecatedTrait */
75-
use ContainerAwareTrait;
66+
public function __construct(
67+
private ContaoFramework $framework,
68+
private RequestStack $requestStack,
69+
private TranslatorInterface $translator,
70+
private CcaTranslator $ccaTranslator,
71+
private EventDispatcherInterface $eventDispatcher,
72+
private PickerBuilderInterface $pickerBuilder,
73+
) {
74+
}
7675

7776
/**
7877
* Handles the installation process.
@@ -120,38 +119,23 @@ public function generalTreeUpdateAction()
120119

121120
private function initializeAndExtractRequest(): Request
122121
{
123-
$container = $this->container;
124-
assert($container instanceof SymfonyContainerInterface);
125-
126-
$framework = $container->get('contao.framework');
127-
assert($framework instanceof ContaoFramework);
122+
$this->framework->initialize();
128123

129124
/**
130125
* @psalm-suppress InternalMethod
131126
* @var Controller $controller
132127
*/
133-
$controller = $framework->getAdapter(Controller::class);
128+
$controller = $this->framework->getAdapter(Controller::class);
134129
$controller->loadLanguageFile('default');
135130

136-
$requestStack = $container->get('request_stack');
137-
assert($requestStack instanceof RequestStack);
138-
139-
$currentRequest = $requestStack->getCurrentRequest();
140-
assert($currentRequest instanceof Request);
131+
$currentRequest = $this->requestStack->getCurrentRequest();
132+
if (null === $currentRequest) {
133+
throw new BadRequestHttpException('No request found.');
134+
}
141135

142136
return $currentRequest;
143137
}
144138

145-
private function getTranslator(): TranslatorInterface
146-
{
147-
$container = $this->container;
148-
assert($container instanceof SymfonyContainerInterface);
149-
$translator = $container->get('translator');
150-
assert($translator instanceof TranslatorInterface);
151-
152-
return $translator;
153-
}
154-
155139
/**
156140
* Run the controller and parse get the response template.
157141
*
@@ -167,19 +151,16 @@ private function runBackendTree(Request $request)
167151
{
168152
[, $treeSelector] = $this->getTemplateData($request);
169153

170-
$container = $this->container;
171-
assert($container instanceof SymfonyContainerInterface);
172-
173154
$template = new ContaoBackendViewTemplate('be_main');
174155
$template
175156
->set('isPopup', true)
176157
->set('main', $treeSelector->generatePopup())
177158
->set('theme', Backend::getTheme())
178-
->set('language', $container->get('request_stack')->getCurrentRequest()->getLocale())
159+
->set('language', $this->requestStack->getCurrentRequest()?->getLocale())
179160
->set(
180161
'title',
181162
StringUtil::specialchars(
182-
$this->getTranslator()->trans(
163+
$this->translator->trans(
183164
'treePicker',
184165
['%table%' => $treeSelector->foreignTable],
185166
'dc-general'
@@ -219,7 +200,7 @@ private function runBackendTreeBreadCrumb(Request $request)
219200
->set('language', $GLOBALS['TL_LANGUAGE'])
220201
->set(
221202
'title',
222-
StringUtil::specialchars($this->getTranslator()->trans('treepickerManager', [], 'dc-general'))
203+
StringUtil::specialchars($this->translator->trans('treepickerManager', [], 'dc-general'))
223204
)
224205
->set('charset', 'utf-8');
225206

@@ -269,19 +250,11 @@ private function runBackendTreeUpdate(Request $request)
269250

270251
$modelId = ModelId::fromSerialized($picker->getConfig()->getExtra('modelId'));
271252

272-
$container = $this->container;
273-
assert($container instanceof SymfonyContainerInterface);
274-
$translator = $container->get('cca.translator.contao_translator');
275-
assert($translator instanceof CcaTranslator);
276-
277-
$dispatcher = $container->get('event_dispatcher');
278-
assert($dispatcher instanceof EventDispatcherInterface);
279-
280253
$factory = new DcGeneralFactory();
281254
$general = $factory
282255
->setContainerName($modelId->getDataProviderName())
283-
->setTranslator($translator)
284-
->setEventDispatcher($dispatcher)
256+
->setTranslator($this->ccaTranslator)
257+
->setEventDispatcher($this->eventDispatcher)
285258
->createDcGeneral();
286259

287260
$dataProvider = $general->getEnvironment()->getDataProvider();
@@ -339,18 +312,10 @@ private function getTemplateData(Request $request, bool $valueFromRequest = fals
339312
throw new BadRequestHttpException('No picker was given here.');
340313
}
341314

342-
$container = $this->container;
343-
assert($container instanceof SymfonyContainerInterface);
344-
$pickerBuilder = $container->get('contao.picker.builder');
345-
assert($pickerBuilder instanceof PickerBuilderInterface);
346-
$picker = $pickerBuilder->createFromData($getPicker);
315+
$picker = $this->pickerBuilder->createFromData($getPicker);
347316
assert($picker instanceof PickerInterface);
348317
$treeSelector = $this->prepareTreeSelector($picker);
349-
//$session = $container->get('session');
350-
$requestStack = $container->get('request_stack');
351-
assert($requestStack instanceof RequestStack);
352-
$session = $requestStack->getSession();
353-
assert($session instanceof SessionInterface);
318+
$session = $this->requestStack->getSession();
354319
$sessionBag = $session->getBag('contao_backend');
355320
assert($sessionBag instanceof AttributeBagInterface);
356321
$value = $picker->getConfig()->getValue();
@@ -393,27 +358,14 @@ private function prepareTreeSelector(PickerInterface $picker)
393358
throw new InvalidArgumentException('The field name contains invalid characters');
394359
}
395360

396-
$container = $this->container;
397-
assert($container instanceof SymfonyContainerInterface);
398-
399-
$requestStack = $container->get('request_stack');
400-
assert($requestStack instanceof RequestStack);
401-
$session = $requestStack->getSession();
402-
assert($session instanceof SessionInterface);
403-
361+
$session = $this->requestStack->getSession();
404362
$sessionBag = $session->getBag('contao_backend');
405363
assert($sessionBag instanceof AttributeBagInterface);
406364

407-
$translator = $container->get('cca.translator.contao_translator');
408-
assert($translator instanceof CcaTranslator);
409-
410-
$dispatcher = $container->get('event_dispatcher');
411-
assert($dispatcher instanceof EventDispatcherInterface);
412-
413365
$itemContainer = (new DcGeneralFactory())
414366
->setContainerName($modelId->getDataProviderName())
415-
->setTranslator($translator)
416-
->setEventDispatcher($dispatcher)
367+
->setTranslator($this->ccaTranslator)
368+
->setEventDispatcher($this->eventDispatcher)
417369
->createDcGeneral();
418370

419371
$definition = $itemContainer->getEnvironment()->getDataDefinition();

src/Resources/config/services.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,13 @@ services:
8787
$menuRenderer: '@contao.menu.renderer'
8888
tags:
8989
- controller.service_arguments
90+
91+
ContaoCommunityAlliance\DcGeneral\Controller\BackendTreeController:
92+
public: true
93+
arguments:
94+
- '@contao.framework'
95+
- '@request_stack'
96+
- '@translator'
97+
- '@cca.translator.contao_translator'
98+
- '@event_dispatcher'
99+
- '@contao.picker.builder'

0 commit comments

Comments
 (0)