diff --git a/README.md b/README.md
index 512cb83dc..b04b577c0 100644
--- a/README.md
+++ b/README.md
@@ -1993,46 +1993,6 @@ return static function (ContainerConfigurator $containerConfigurator): void {
-### NoAbstractControllerConstructorRule
-
-Abstract controller should not have constructor, as it can lead to tight coupling. Use @required annotation instead
-
-```yaml
-rules:
- - Symplify\PHPStanRules\Rules\Symfony\NoAbstractControllerConstructorRule
-```
-
-```php
-abstract class AbstractController extends Controller
-{
- public function __construct(
- private SomeService $someService
- ) {
- }
-}
-```
-
-:x:
-
-
-
-```php
-abstract class AbstractController extends Controller
-{
- private $someService;
-
- #[Required]
- public function autowireAbstractController(SomeService $someService)
- {
- $this->someService = $someService;
- }
-}
-```
-
-:+1:
-
-
-
### AlreadyRegisteredAutodiscoveryServiceRule
Remove service, as already registered via autodiscovery ->load(), no need to set it twice.
diff --git a/config/symfony-rules.neon b/config/symfony-rules.neon
index cefde8013..d79e87033 100644
--- a/config/symfony-rules.neon
+++ b/config/symfony-rules.neon
@@ -1,5 +1,4 @@
rules:
- - Symplify\PHPStanRules\Rules\Symfony\NoAbstractControllerConstructorRule
- Symplify\PHPStanRules\Rules\Symfony\NoRequiredOutsideClassRule
- Symplify\PHPStanRules\Rules\Symfony\SingleArgEventDispatchRule
- Symplify\PHPStanRules\Rules\Symfony\NoListenerWithoutContractRule
diff --git a/src/Enum/RuleIdentifier/SymfonyRuleIdentifier.php b/src/Enum/RuleIdentifier/SymfonyRuleIdentifier.php
index 56be02675..2b648e89b 100644
--- a/src/Enum/RuleIdentifier/SymfonyRuleIdentifier.php
+++ b/src/Enum/RuleIdentifier/SymfonyRuleIdentifier.php
@@ -20,8 +20,6 @@ final class SymfonyRuleIdentifier
public const string NO_STRING_IN_GET_SUBSCRIBED_EVENTS = 'symfony.noStringInGetSubscribedEvents';
- public const string SYMFONY_NO_ABSTRACT_CONTROLLER_CONSTRUCTOR = 'symfony.noAbstractControllerConstructor';
-
public const string SINGLE_REQUIRED_METHOD = 'symfony.singleRequiredMethod';
public const string SYMFONY_REQUIRED_ONLY_IN_ABSTRACT = 'symfony.requiredOnlyInAbstract';
diff --git a/src/Rules/Symfony/NoAbstractControllerConstructorRule.php b/src/Rules/Symfony/NoAbstractControllerConstructorRule.php
deleted file mode 100644
index 9228931e4..000000000
--- a/src/Rules/Symfony/NoAbstractControllerConstructorRule.php
+++ /dev/null
@@ -1,60 +0,0 @@
-
- */
-final class NoAbstractControllerConstructorRule implements Rule
-{
- public const string ERROR_MESSAGE = 'Abstract controller should not have constructor, to avoid override by child classes. Use #[Require] or @require and autowire() method instead';
-
- public function getNodeType(): string
- {
- return Class_::class;
- }
-
- /**
- * @param Class_ $node
- */
- public function processNode(Node $node, Scope $scope): array
- {
- if (! $node->isAbstract()) {
- return [];
- }
-
- if (! $node->name instanceof Identifier) {
- return [];
- }
-
- $className = $node->name->toString();
- if (! str_ends_with($className, 'Controller')) {
- return [];
- }
-
- if (! $node->getMethod('__construct')) {
- return [];
- }
-
- $identifierRuleError = RuleErrorBuilder::message(self::ERROR_MESSAGE)
- ->identifier(SymfonyRuleIdentifier::SYMFONY_NO_ABSTRACT_CONTROLLER_CONSTRUCTOR)
- ->build();
-
- return [$identifierRuleError];
- }
-}
diff --git a/tests/Rules/Symfony/NoAbstractControllerConstructorRule/Fixture/SkipNonAbstractController.php b/tests/Rules/Symfony/NoAbstractControllerConstructorRule/Fixture/SkipNonAbstractController.php
deleted file mode 100644
index 074f67ca5..000000000
--- a/tests/Rules/Symfony/NoAbstractControllerConstructorRule/Fixture/SkipNonAbstractController.php
+++ /dev/null
@@ -1,12 +0,0 @@
-> $expectedErrorMessagesWithLines
- */
- #[DataProvider('provideData')]
- public function testRule(string $filePath, array $expectedErrorMessagesWithLines): void
- {
- $this->analyse([$filePath], $expectedErrorMessagesWithLines);
- }
-
- /**
- * @return Iterator, mixed>>
- */
- public static function provideData(): Iterator
- {
- yield [__DIR__ . '/Fixture/SomeAbstractController.php', [[
- NoAbstractControllerConstructorRule::ERROR_MESSAGE,
- 7,
- ]]];
-
- yield [__DIR__ . '/Fixture/SkipNonAbstractController.php', []];
- }
-
- protected function getRule(): Rule
- {
- return new NoAbstractControllerConstructorRule();
- }
-}