digitalstate/platform-organization-bundle
Installation
Add the bundle to your composer.json:
composer require digitalstate/platform-organization-bundle
Register it in config/bundles.php:
return [
// ...
DigitalState\Bundle\OrganizationBundle\DsOrganizationBundle::class => ['all' => true],
];
First Use Case: Fixture Loading
Extend your data fixtures with organization-aware traits/interfaces.
Example: Load business units with BusinessUnitExtensionAwareTrait:
use Ds\Bundle\OrganizationBundle\Migration\Extension\BusinessUnitExtensionAwareTrait;
class LoadBusinessUnitData extends AbstractFixture implements BusinessUnitExtensionAwareInterface
{
use BusinessUnitExtensionAwareTrait;
public function load(ObjectManager $manager)
{
$this->loadBusinessUnitsFromYaml($manager, 'path/to/business_units.yml');
}
}
Key Files to Review
Migration/Extension/ for available extension traits/interfaces.Resources/config/doctrine/ for entity mappings (if extended).DependencyInjection/ for configuration options.YAML-Based Fixtures: Use loadBusinessUnitsFromYaml(), loadDepartmentsFromYaml(), etc., to populate organization hierarchies.
# business_units.yml
business_units:
- id: 1
name: "Marketing"
parent: null
- id: 2
name: "Engineering"
parent: 1
$this->loadBusinessUnitsFromYaml($manager, 'business_units.yml');
Dynamic Parent-Child Relationships: Leverage parent keys in YAML to auto-link entities.
Extend Oro’s Organization Bundle: Override or extend Oro’s BusinessUnit, Department, or User entities by injecting this bundle’s services.
// config/services.yaml
DigitalState\Bundle\OrganizationBundle\Service\OrganizationService:
arguments:
$oroOrganizationManager: '@oro_organization.manager'
Event Listeners: Subscribe to Oro’s organization events (e.g., oro_organization.business_unit.create) and extend logic.
// src/EventListener/OrganizationListener.php
public function onBusinessUnitCreate(OrganizationEvent $event)
{
$businessUnit = $event->getBusinessUnit();
// Custom logic (e.g., audit logs, notifications)
}
php bin/console ds:organization:sync-hierarchy
use DigitalState\Bundle\OrganizationBundle\Entity\BusinessUnit;
public function getBusinessUnits(BusinessUnitRepository $repo)
{
return $repo->findAllWithHierarchy();
}
Namespace Conflicts
OrganizationBundle. Ensure your use statements and service IDs don’t clash (e.g., BusinessUnit vs. DsBusinessUnit).Fixture Loading Order
BusinessUnit before Department). Use setOrder() in fixtures:
class LoadDepartmentsData extends AbstractFixture { setOrder(2); }
Missing Dependencies
oro/organization-bundle. Add it explicitly if not auto-installed:
composer require oro/organization-bundle
YAML Schema Validation
parent must reference existing IDs). Validate with:
php bin/console debug:container Ds\Bundle\OrganizationBundle\Validator\BusinessUnitValidator
.env:
DOCTRINE_ORM_OPTIMIZER_ENABLED=false
dump() in fixtures to verify data:
$businessUnits = $this->getBusinessUnitExtension()->getBusinessUnits();
dump($businessUnits);
Custom Extensions
OrganizationExtensionInterface to add new fixture types:
class CustomExtension implements OrganizationExtensionInterface
{
public function loadFromYaml(ObjectManager $manager, string $file, array $data) { ... }
}
services.yaml:
DigitalState\Bundle\OrganizationBundle\Migration\Extension\CustomExtension:
tags: ['ds_organization.extension']
Override Entity Mappings
BusinessUnit) in your bundle’s Resources/config/doctrine/.Configuration
config/packages/ds_organization.yaml:
ds_organization:
hierarchy_sync:
enabled: true
cron: '0 0 * * *'
flush() in chunks:
foreach ($businessUnits as $unit) {
$manager->persist($unit);
if ($i % 20 === 0) $manager->flush();
}
How can I help you explore Laravel packages today?