Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Dto Entity Updater Laravel Package

elriseio/dto-entity-updater

View on GitHub
Deep Wiki
Context7
1.1.0

Changed

  • DI Extension modernised (CR-002-IMPL-04): DtoEntityUpdaterExtension::load() now registers an autowired Definition for DtoEntityUpdater and a public Alias for DtoEntityUpdaterInterface via ContainerBuilder::register() / setAlias(). The hand-rolled YAML alias in src/Resources/config/services.yaml is replaced.
  • Bug-1 fix (CR-002-IMPL-01): RepositoryHelperTrait::updateField now throws LogicException on InvalidArgumentException from the resolver (was: silent skip on ReflectionException, masking data corruption as success).
  • Bug-2 fix (CR-002-IMPL-02): DefaultResolver now throws InvalidArgumentException for unknown / untyped setter parameters (was: silent fallback to '').
  • Bug-3 fix (CR-002-IMPL-03): DtoEntityUpdater::updateField is now public and accepts ?callable $transform and ?mixed $default = Placeholder::NONE_DEFAULT parameters (matching the trait).
  • Version bumped to 1.1.0 (CR-002-IMPL-05): minor bump — new metadata, new scripts, new dev deps, contract-change bug fixes are all backward-compatible. composer validate --strict reports valid.
  • .gitignore hardened (CR-002-IMPL-08): adds .phpunit.cache/, .phpunit.xml, /itests/reports/, /itests/runner/metrics.php. Operator override of the AGENT_DEVELOPER_POLICY.md protected-file rule, applied at close-out.
  • License re-licensed (AR-013 finalisation): bundle relicensed from proprietary to MIT (SPDX MIT) per ADR 0010 transition Proposed -> Accepted (operator decision 2026-07-23). LICENSE file replaced with standard MIT Expat text; composer.json#license field updated from proprietary to MIT. The LICENSE / composer.json#license / ADR-0010 acceptance / tag alignment ships together at commit tagged v1.1.0. Re-licensing is irreversible; see ADR 0010 §"Consequences" for follow-up policy.

Added

  • Test infrastructure (CR-001-T1): phpunit.xml.dist with unit and integration suites, composer test / test-unit / test-integration / phpstan / bench scripts, doctrine/orm, doctrine/dbal, phpstan/phpstan, phpbench/phpbench, symfony/phpunit-bridge as require-dev.
  • Placeholder constants tests (CR-001-T2): value + type declaration assertions, pairwise distinctness guard, non-empty NONE_ARRAY identity guard.
  • DtoEntityUpdater tests (CR-001-T3): 10 tests covering the lenient-implementer contract — silent-skip on missing accessors, sentinel-match short-circuit, real-update path, no-op short-circuit, mixed payload, unknown-type lenient skip.
  • RepositoryHelperTrait tests (CR-001-T4): 12 tests covering the strict-implementer contract — LogicException when host class does not implement RepositoryInterface (and on unknown setter type), EntityNotFoundException when find() returns null, InvalidArgumentException on missing accessor, sentinel-match skip, transform callable, explicit $default.
  • DtoEntityUpdaterExtension tests (CR-001-T5): 7 tests asserting the contract from CR-002-IMPL-04.
  • Domain-purity gate (CR-002-IMPL-09): scripts/check_domain_purity.sh enforces src/Domain/ has no Symfony/Doctrine/Reflection/Psr imports.
  • Configuration namespace reserved (CR-002-IMPL-13): new Configuration class; DtoEntityUpdaterExtension now calls processConfiguration() so unknown keys surface as ConfigurationException at compile time. Reserves dto_entity_updater.default_resolver.cache.enabled and .pool_service keys.
  • Logger injection (CR-002-IMPL-12): DtoEntityUpdater now accepts an optional Psr\Log\LoggerInterface (defaults to NullLogger); emits info records on every silent-skip path (missing setter / getter / unknown setter type).
  • CHANGELOG.md (CR-002-IMPL-07): this file.
  • LICENSE (CR-002-IMPL-07): proprietary notice matching composer.json#license = "proprietary".
  • README rewrite (CR-002-IMPL-06): canonical names, install / minimum-requirements / usage / testing / performance / license / changelog sections; references to non-existent classes (DtoEntityUpdaterRepositoryInterface, TariffRepository) removed.
  • DefaultResolver extraction (CR-003-OPT-01): new DefaultResolver and DefaultResolverInterface in src/Infrastructure/Reflection/. Both implementers (DtoEntityUpdater, RepositoryHelperTrait) now delegate to the resolver; DtoEntityUpdater accepts an optional constructor-injected DefaultResolverInterface.
  • CachedDefaultResolver (CR-003-OPT-02): PSR-6 wrapper around DefaultResolver; defaults to ArrayAdapter in-memory cache.
  • phpbench infrastructure (CR-003-OPT-03): phpbench.json, composer bench script, 4 bench subjects (cold / warm / bulk-cold / bulk-cached).
  • DI integration for cache (CR-003-OPT-04): dto_entity_updater.default_resolver.cache.enabled (default false) and .pool_service (optional) config keys wire CachedDefaultResolver automatically when enabled.
  • Performance documentation (CR-003-OPT-05): docs/perf.md with hot-path call graph, bench numbers, and honest "when to enable vs disable" guidance.
  • Components docs (CR-002-IMPL-11): placeholder-sentinels.md, domain-interfaces.md mirroring the structure of the existing dto-entity-updater.md and repository-helper-trait.md.
  • PHPStan level 6 (CR-001-T6): phpstan.neon with level 6 over src/, tests/, bench/; empty phpstan-baseline.neon.
  • CI workflow (CR-001-T8): .github/workflows/ci.yml with quality-gates job; PHP 8.3 / 8.4 / 8.5 matrix; domain-purity + unit + integration + phpstan + cs:check gates.

Carry-over (follow-up issues)

  • DE-001-T7 — Integration test scaffold + docker-compose. The integration suite directory exists and composer test-integration is wired but the sqlite-in-memory factory and the docker-compose scenario scripts are not authored.
  • DE-002-10 — Promote 5 captured trade-offs to ADRs 0002-0006 and author ADRs 0007 (strict-mode exception contract) and 0008 (throw on unknown default types). Architect role; the underlying contract changes are already implemented and tested.

Honest reading

  • The cache opt-in (CR-003-OPT-02/04) does not speed up the micro-benchmark fixture (PHP 8.5 reflection is already very fast; cache adapter overhead dominates). The cache still ships because the expected payoff is for entities with complex Doctrine annotation metadata and long-running worker processes, not for typical PHP-FPM workloads. See docs/perf.md.
  • 4 ADRs (0002-0006, 0007-0008) document the contract changes but are not yet authored. Follow-up DE-002-10 captures the work for the architect role. Update 2026-07-23: all 4 of those ADRs (0002-0008) are now authored in docs/adr/, plus 0009 (bundle rename) and 0010 (license and publication strategy, Proposed awaiting operator choice). See docs/adr/README.md-style index by listing the directory.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels