Skip to content

[DependencyInjection] Update ResolveClassPass to check class existence #61215

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 29, 2025

Conversation

GaryPEGEOT
Copy link
Contributor

@GaryPEGEOT GaryPEGEOT commented Jul 23, 2025

Q A
Branch? 7.4
Bug fix? no
New feature? no
Deprecations? no
Issues Fix #54095
License MIT

Currently doesn't check for incorrect factories, but I'm not sure what would be the best approach

@carsonbot carsonbot added Status: Needs Review DependencyInjection DX DX = Developer eXperience (anything that improves the experience of using Symfony) Feature labels Jul 23, 2025
@carsonbot carsonbot added this to the 7.4 milestone Jul 23, 2025
@carsonbot carsonbot changed the title [DX][DI] Add a compiler pass to check class existence. [DependencyInjection] Add a compiler pass to check class existence. Jul 23, 2025
@OskarStark OskarStark changed the title [DependencyInjection] Add a compiler pass to check class existence. [DependencyInjection] Add a compiler pass to check class existence Jul 23, 2025
@GaryPEGEOT GaryPEGEOT force-pushed the feat/check-class-pass branch from 740f29a to 65259c9 Compare July 23, 2025 13:19
@GaryPEGEOT GaryPEGEOT requested a review from chalasr as a code owner July 23, 2025 13:19
@nicolas-grekas

This comment was marked as outdated.

@GaryPEGEOT
Copy link
Contributor Author

Can't we patch the existing compiler pass that copies the id to the class when no class is set, and make it throw when id is not a class?

But then it would not work if you define a manual id and make a typo in the class (although more of a niche case)

@GaryPEGEOT
Copy link
Contributor Author

There are cases where the class is eg string for some internal services.

So we could have something like ['mailer.transport', 'createFromDsn'] at this point? (Not a reference but the service ID as is?

@GaryPEGEOT GaryPEGEOT force-pushed the feat/check-class-pass branch from 65259c9 to 321ccff Compare July 24, 2025 08:48
@nicolas-grekas
Copy link
Member

There are many ways one can mess up with their DI config. Validating everything adds to the compilation time. That's something we always considered outside of the scope of the compilation step.

@GaryPEGEOT GaryPEGEOT changed the title [DependencyInjection] Add a compiler pass to check class existence [DependencyInjection] Update ResolveClassPass to check class existence Jul 24, 2025
@OskarStark OskarStark changed the title [DependencyInjection] Update ResolveClassPass to check class existence [DependencyInjection] Update ResolveClassPass to check class existence Jul 24, 2025
Copy link
Member

@nicolas-grekas nicolas-grekas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, test cases changes look consistent with the updated behavior.

@nicolas-grekas nicolas-grekas force-pushed the feat/check-class-pass branch from 349c87c to dbd5c25 Compare July 29, 2025 18:23
@nicolas-grekas
Copy link
Member

Thank you @GaryPEGEOT.

@nicolas-grekas nicolas-grekas merged commit 3ffc9ab into symfony:7.4 Jul 29, 2025
10 of 11 checks passed
@GaryPEGEOT GaryPEGEOT deleted the feat/check-class-pass branch July 29, 2025 18:24
nicolas-grekas added a commit that referenced this pull request Jul 30, 2025
…without a class when its id is a non-existing FQCN (nicolas-grekas)

This PR was merged into the 7.4 branch.

Discussion
----------

[DependencyInjection] Deprecate registering a service without a class when its id is a non-existing FQCN

| Q             | A
| ------------- | ---
| Branch?       | 7.4
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Issues        | -
| License       | MIT

#61215 might be too disruptive. This turns the exception into a deprecation.

Commits
-------

7d3ad74 [DependencyInjection] Deprecate registering a service without a class when its id is a non-existing FQCN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
DependencyInjection DX DX = Developer eXperience (anything that improves the experience of using Symfony) Status: Reviewed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Confusing error message: 'must define the "event" attribute on "kernel.event_listener" tags' when the problem was nonexistent class
6 participants