somnambulist / domain
Provides a collection of entities, helpers and base implementations for creating domain objects.
Installs: 4 947
Dependents: 8
Suggesters: 0
Security: 0
Stars: 27
Watchers: 5
Forks: 2
Open Issues: 0
Requires
- php: >=8.3
- ext-bcmath: *
- ext-json: *
- ext-mbstring: *
- beberlei/assert: ^3.3
- ramsey/uuid: ^4.7
- somnambulist/collection: ^5.5
- somnambulist/enumeration: ^1.0
- symfony/string: ^7.0|^6.4
Requires (Dev)
- ext-pdo: *
- doctrine/dbal: ^4.0
- doctrine/doctrine-bundle: ^2.12.0
- doctrine/orm: ^3.0
- pagerfanta/pagerfanta: ^v4.6.0
- phpspec/prophecy-phpunit: ^2.1
- phpunit/phpunit: ^11.2
- somnambulist/read-models: ^4.1.0
- symfony/amqp-messenger: ^7.1
- symfony/event-dispatcher: ^7.1
- symfony/framework-bundle: ^7.1
- symfony/http-foundation: ^7.1
- symfony/messenger: ^7.1
- symfony/phpunit-bridge: ^7.1
- symfony/property-access: ^7.1
- symfony/security-bundle: ^7.1
- symfony/serializer: ^7.1
- symfony/var-dumper: ^7.1
- symfony/yaml: ^7.1
Suggests
- doctrine/orm: To use the Doctrine components and have an entity mapper
- giggsey/libphonenumber-for-php: To validate phone numbers / convert to E164 from a local format
- laravel-doctrine/orm: A Laravel mapping for Doctrine
- pagerfanta/pagerfanta: For Pagination of Doctrine results and other data
- symfony/http-foundation: For request id injection into event context
- symfony/messenger: (A)Sync Bus implementation for Symfony needed for query/command/event bus messenger implementations
- symfony/property-access: Needed for serializing JSON payloads
- symfony/security-core: For injecting the user information into event context
- symfony/serializer: Send domain events as JSON strings via messenger
- dev-master
- 7.0.0
- 6.0.0
- 5.x-dev
- 5.1.0
- 5.0.0
- 4.7.0
- 4.6.0
- 4.5.0
- 4.4.0
- 4.3.4
- 4.3.3
- 4.3.2
- 4.3.1
- 4.3.0
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.0
- 4.0.0
- 3.2.0
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.0
- 2.5.1
- 2.5.0
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.8
- 2.2.7
- 2.2.6
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.0
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2025-04-12 17:14:54 UTC
README
Provides a core set of support classes for building domain oriented projects. This library compiles the previously separate domain and mapping libraries into a single project for easier maintenance.
It consists of:
- Commands
- CommandBus interface / abstract command
- SF Messenger implementation
- Doctrine
- Enumeration factories + Type bindings
- Additional types / type overrides for the Doctrine Type system
- Abstract Aggregate repository
- Custom Postgres DQL functions
- Models
- Contracts - value object interface definitions
- Types - a collection of value-objects, enumerations, and date helpers
- AggregateRoot - an aggregate root stub implementation that can raise events
- AbstractEntity and AbstractEntityCollection - child entities and helper for an aggregate root
- Events
- EventBus interface / abstract event
- SF Messenger EventBus implementation
- Doctrine subscriber that broadcasts onFlush all events from aggregate roots
- Custom serializer to handle encode/decode when the event class does not exist
- Jobs
- JobQueue interface / abstract job
- SF Messenger implementation
- Queries
- QueryBus interface / abstract query
- SF Messenger implementation
- default XML mappings for embeddable objects in Doctrine .dcm.xml and Symfony .orm.xml conventions
Requirements
- PHP 8.3+
- mb_string
- bcmath
- beberlei/assert
- eloquent/enumeration
- somnambulist/collection
- symfony/messenger for the Messenger bus implementations.
Installation
Install using composer, or checkout / pull the files from github.com.
- composer require somnambulist/domain
Upgrading from 5.X to 7.X
From 7.0 PHP 8.3+ is required, additionally, with the move to Doctrine 3.0 there are substantial differences in how
repositories are implemented. Instead of using custom repositories, an AbstractAggregateRepository
has been added
that directly calls into Doctrine EntityManager.
AbstractModelLocator
and AbstractServiceModelLocator
have been removed as the addition of type-hints prevented the
overriding of findBy etc. As these were helpers, they are no longer necessary.
Most model types are now read-only. Several have been changed to native enums (DistanceUnit
, AreaUnit
).
Commands and Jobs are now read-only classes. Queries are still writable to keep the meta-data and include support.
Upgrading from 4.X to 5.X
From 5.X this project will be re-namespaced to drop Domain
. 4.X includes a classmap.php
providing
aliases for backwards compatibility.
From 5.0 the QueryBus supports typed response objects. This is an optional feature that provides a built-in mechanism to handle failed queries without trapping exceptions in the calling code.
From 5.0 domain event names are always generated at construction time as snake_case
.
Upgrading from 3.X to 4.X
From 4.X this project was re-namespaced to Somnambulist\Components\Domain
. Update all references to
reflect this change this includes any Doctrine mapping files / annotations.
The Doctrine AbstractIdentityType
was moved out of the Identity
namespace to the main Types
.
Usage
See the docs folder for more documentation on each component.
- Aggregate Root
- Domain Events
- Value Objects
- Enumerations
- Enumeration Bridge
- Doctrine Mapping
- Symfony Messenger Integration
- Using Command Query Separation