21torr/rad
RAD Bundle is a Symfony package for rapid application development, bundling commonly used features and 21TORR's opinionated conventions so teams can scaffold and ship applications faster.
Architecture fit
21torr/rad is a Symfony bundle (RadBundle), not a Laravel package. It is enabled through Symfony's bundle/DI system and depends on Symfony HttpKernel, Validator, Translation, and Doctrine ORM. A Laravel app cannot meaningfully composer require and enable it — Laravel's container, routing, Eloquent, and validation are parallel implementations.ApiResponse + ApiResponseNormalizer, EntityModel + entity traits, ImportData, ArgumentBag, EnumValue, TranslationHelper, AbilitiesVoter, Linkable, InMemoryCache.Integration feasibility
EnumValue, ArgumentBag, ImportData) are even theoretically portable, and each still drags Symfony/Validator assumptions.Technical risk
Model, Routable, sortable and simple-search handlers, and renamed entity traits; DoctrineChangeChecker is now deprecated. The API is explicitly opinionated ("conventions and opinions as used by 21TORR").Key questions
Stack fit
Migration path
ImportData-style normalization or an ApiResponse-style envelope natively on Illuminate; keep the semantics, drop the dependency.composer require 21torr/rad, register RadBundle in config/bundles.php, then adopt incrementally. Exclude deprecated pieces (DoctrineChangeChecker, Model) from any new adoption plan.Compatibility
ApiResponse), Validator (ArgumentBag, NotNull messages), Translation (TranslationHelper, TranslatableInterface).ApiResponseNormalizer and AbilitiesVoter register services.Sequencing
EnumValue, ArgumentBag, ImportData) — adopt only if owning the code is acceptable.ApiResponse + ApiResponseNormalizer::createResponse() on a single API endpoint; verify envelope and explicit status-code behavior (the constructor now enforces an explicit status code).EntityModel + EntityFieldsTrait/ModifiableEntityFieldsTrait in one Doctrine-heavy module; validate persist/update/refresh against existing repository patterns.AbilitiesVoter last — it changes authorization semantics (CAN_ attributes) and needs a policy review.Maintenance
Support
21torr-docs.pages.dev and issues go to GitHub. A TPM should name an internal owner (one senior PHP engineer) with a documented escalation path to upstream or a fork.Scaling
InMemoryCache is per-request/per-process — do not treat it as a shared cache layer.EntityModel sits directly on the UnitOfWork; profile write-heavy paths as with any Doctrine abstraction.Failure modes
Ramp-up
ApiResponse and EntityModel assumptions before any broader commitment.How can I help you explore Laravel packages today?