`object|<Class>` docblocks in `DispatchTrait` break metadata warmup under symfony/type-info 7.4 (`Cannot create union with both "object" and class type`)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 1/5
- Thời gian dự kiến
- Dưới một giờ
- Mức phù hợp với người mới
- 88/100
Hướng nghiên cứu
Bắt đầu bằng cách kiểm tra src/Symfony/Messenger/DispatchTrait.php và src/Doctrine/Common/Messenger/DispatchTrait.php, sau đó sử dụng lệnh grep đã nêu để xác nhận cả hai docblock dư thừa. Chạy bản tái hiện độc lập với Symfony TypeInfo 7.4; hoàn tất có nghĩa là quá trình trích xuất metadata không còn phát sinh ngoại lệ union-type đã báo cáo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
API Platform version
4.3.13
PHP version
8.4
Description
api-platform/core 4.3 ships redundant union docblocks of the form
object|<Class> in its own source:
src/Symfony/Messenger/DispatchTrait.php:28→@param object|Envelope $messagesrc/Doctrine/Common/Messenger/DispatchTrait.php:28→@param object|Envelope $message
With symfony/type-info 7.4 installed, the PhpStanExtractor that API Platform
wires as api_platform.property_info.php_stan_extractor throws an Exception while building
the type graph whenever it parses such a docblock:
Symfony\Component\TypeInfo\Exception\InvalidArgumentException:
Cannot create union with both "object" and class type.
at vendor/symfony/type-info/Type/UnionType.php:75
object|Envelope is redundant — object already subsumes every class type.
The legacy symfony/property-info Type model tolerated this; symfony/type-info
7.4 rejects it hard.
This regressed cache:clear / routing warmup on the Symfony 7.3 → 7.4 bump.
Relation to #8201 / #8206
PR #8206 (released in 4.3.10) isolated the framework property_info service
from API Platform's extractors via private api_platform.property_info.* tags +
a bridge compiler pass. That fixed the path where API Platform's PhpStanExtractor
leaked into the framework service (Sylius @template T of object crash).
It does not cover this case: API Platform's own PhpStanExtractor still
parses object|<Class> docblocks during metadata warmup and hits the same
type-info exception. The remaining 4.3 path is still affected.
How to reproduce
Minimal standalone reproduction (public packages only, no app kernel needed):
https://gist.github.com/schmunk42/3357f3d0fdffe11e977812900355cefd
composer install
php repro.php
PHP : 8.4.22
api-platform/core: v4.3.13
symfony/type-info: v7.4.9
symfony/property-info: v7.4.8
------------------------------------------------------------
[KO] Symfony\Component\TypeInfo\Exception\InvalidArgumentException: Cannot create union with both "object" and class type.
thrown from: .../symfony/type-info/Type/UnionType.php:75
The gist invokes the exact extractor API Platform wires as
api_platform.property_info.php_stan_extractor directly
Title:
on a property whose
docblock mirrors the DispatchTrait shape (@var object|Envelope).
You can also confirm the offending docblocks directly:
grep -rn "object|Envelope" vendor/api-platform/core/src
# src/Doctrine/Common/Messenger/DispatchTrait.php:28
# src/Symfony/Messenger/DispatchTrait.php:28
Possible solution
Drop the redundant |Envelope from both DispatchTrait docblocks — the
method already declares object $message / : Envelope in the signature, so
the docblock carries no extra information:
- /**
- * @param object|Envelope $message
- */
private function dispatch(object $message): Envelope
(or @param object $message if a docblock is desired). This keeps the source
free of redundant unions that symfony/type-info 7.4 rejects.
- Ngôn ngữ chính
- PHP
- Star
- 2.6k
- Fork
- 982
- Merge trung bình
- 1 ngày 17 giờ
- Pull request đã merge (30 ngày)
- 67
Chuẩn bị môi trường
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của api-platform/core
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
api-platform/core#8588 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
api-platform/core#8573 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
api-platform/core#8564 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
api-platform/core#8495 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
api-platform/core#8475 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của api-platform/core
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
domain/crm-after-sales Platform(Default) priority/high
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
kind/bug status/to verify
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
PHP-CS-Fixer/PHP-CS-Fixer#9867 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
sync-en
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 2 ngày
-
sync-en
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 2 ngày