Sylius Stack Bundle for DDD Foundation. Provides Admin UI menu builder, Grid utilities, and Resource integration.
composer require alexandrebulete/ddd-sylius-bundleAdd the bundle to your config/bundles.php:
return [
// ...
AlexandreBulete\DddSyliusBundle\DddSyliusBundle::class => ['all' => true],
];src/
├── DddSyliusBundle.php
├── Admin/
│ └── Menu/
│ ├── MenuBuilder.php
│ └── MenuContributorInterface.php
├── Grid/
│ └── GridPageResolver.php
└── Resources/
└── config/
├── services.php
└── sylius_resource.yaml
The bundle provides a modular menu builder for Sylius Admin UI. Each bounded context can contribute menu items.
use AlexandreBulete\DddSyliusBundle\Admin\Menu\MenuContributorInterface;
use Knp\Menu\ItemInterface;
use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag;
#[AutoconfigureTag('app.menu_contributor')]
final readonly class PostMenuContributor implements MenuContributorInterface
{
public function contribute(ItemInterface $menu): void
{
$menu
->addChild('posts', [
'route' => 'app_admin_post_index',
])
->setLabel('Posts')
->setLabelAttribute('icon', 'tabler:article');
}
}Utility for resolving pagination parameters from Grid and Request:
use AlexandreBulete\DddSyliusBundle\Grid\GridPageResolver;
$page = GridPageResolver::getCurrentPage($grid, $parameters);
$itemsPerPage = GridPageResolver::getItemsPerPage($grid, $parameters);Configure resource mapping for your bounded contexts:
# config/packages/sylius_resource.yaml
sylius_resource:
mapping:
paths:
- '%kernel.project_dir%/src/*/Infrastructure/Sylius/Resource'src/Post/
├── Domain/
│ └── Model/Post.php
├── Infrastructure/
│ ├── Sylius/
│ │ ├── Resource/
│ │ │ └── PostResource.php
│ │ └── Grid/
│ │ └── PostGrid.php
│ └── Symfony/
│ └── Menu/
│ └── PostMenuContributor.php