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

Domain Laravel Package

biig/domain

View on GitHub
Deep Wiki
Context7

Domain component

Build Status Latest Stable Version License

This library is design to help you to build your application with a Domain Design Development approach.

It is well integrated with:

  • Symfony >= 4.3 (for >=3.3 compatibility, install the version 1.5 of the domain component)
  • ApiPlatform >= 2.1
  • Doctrine >=2.5

But you can use it with any PHP project.

Here are some slides that explain how we get there.

Features

Domain Events:

Drawbacks

This library is build to allow you to use Doctrine models as Domain model. This has some cost: you can't instantiate domain model by hand anymore. This means that you need a factory for any of the usage of your domain model.

This component provides the implementation for Symfony serializer and Doctrine. For your own needs you should use the class (service if you use the bundle) Biig\Component\Domain\Model\Instantiator\Instantiator.

Installation

composer require biig/domain

Basic usage

class YourModel extends DomainModel
{
    public const CREATION = 'creation';
    public function __construct()
    {
        $this->dispatch(new DomainEvent($this), self::CREATION);
    }
}
class DomainRule implements DomainRuleInterface
{
    public function on()
    {
        return YourModel::CREATION;
    }
    
    public function execute(DomainEvent $event)
    {
        // Do Something on your model creation
    }
}

As your model needs a dispatcher you need to call the setDispatcher() method any time you create a new instance of your model. To avoid doing this manually you can use the Instantiator that the library provides.

It doesn't use the constructor to add the dispatcher because in PHP you can create objects without the constructor. For instance, that's what Doctrine does.

Integration to Symfony

Use the bundle :

<?php
// config/bundles.php

return [
    // ...
    Biig\Component\Domain\Integration\Symfony\DomainBundle::class => ['all' => true],
];

Learn more about Symfony Integration

Versions

Version Status Documentation Symfony Version  PHP Version
1.x Maintained v1 '>= 3.3 && <5' '>= 7.1'
2.x Latest v2 '>= 4.3' '>= 7.1'
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.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource