digitalstate/platform-user-bundle
Installation
composer require digitalstate/platform-user-bundle
Ensure OroUserBundle is already installed (this bundle extends it).
Enable the Bundle
Add to config/bundles.php:
return [
// ...
DigitalState\PlatformUserBundle\DigitalStatePlatformUserBundle::class => ['all' => true],
];
First Use Case: Resolving Session Data
Inject the ds.data.data service and resolve session-based user data:
use Symfony\Component\HttpFoundation\RequestStack;
class MyController extends AbstractController
{
public function __construct(
private RequestStack $requestStack,
private $dataResolver // Autowire via `ds.data.data`
) {}
public function showUserData()
{
$username = $this->dataResolver->resolve('ds.session.user.username');
// Use $username (e.g., pre-fill a form)
}
}
Key Configuration
Check config/packages/digitalstate_platform_user.yaml for resolver mappings (if any). Override defaults in config/packages/overrides/digitalstate_platform_user.yaml.
Workflow:
ds.session.user.<key> to resolve session data tied to the authenticated user.Example: Form Pre-Population
class UserProfileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$dataResolver = $this->container->get('ds.data.data');
$defaultRole = $dataResolver->resolve('ds.session.user.role');
$builder
->add('role', ChoiceType::class, [
'choices' => ['admin' => 'Admin', 'editor' => 'Editor'],
'data' => $defaultRole,
]);
}
}
Leverage existing OroUserBundle features (e.g., user entities, roles) while extending them:
// Extend user entity (e.g., add custom fields)
namespace App\Entity;
use DigitalState\PlatformUserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
class User extends BaseUser
{
#[ORM\Column(type: 'string', nullable: true)]
private ?string $customField = null;
// Getters/setters...
}
Use the bundle’s migration tools to:
use DigitalState\PlatformUserBundle\Migration\Extension\UserExtension;
public function up(Schema $schema)
{
$userExtension = new UserExtension($this->connection);
$userExtension->addUserField('custom_field', 'string', ['nullable' => true]);
}
Extend user lifecycle events (e.g., user.login, user.update):
// src/EventListener/UserListener.php
namespace App\EventListener;
use DigitalState\PlatformUserBundle\Event\UserEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
UserEvent::USER_LOGIN => 'onUserLogin',
];
}
public function onUserLogin(UserEvent $event)
{
$user = $event->getUser();
// Custom logic (e.g., log activity, update session)
}
}
Session Dependency
ds.session.user.*) only works for authenticated users. Always provide fallbacks:
$username = $this->dataResolver->resolve('ds.session.user.username', 'guest');
OroUserBundle Conflicts
User entity, ensure your class does not conflict with Oro’s autogenerated proxies. Use #[ORM\Entity(repositoryClass: 'App\Repository\UserRepository')] explicitly.Migration Order
php bin/console doctrine:migrations:execute if needed.Resolver Caching
ds.session.user.<key> format. Verify keys exist in config/packages/digitalstate_platform_user.yaml.# config/services.yaml
DigitalState\PlatformUserBundle\EventListener\UserListener:
tags: ['kernel.event_subscriber']
arguments:
$debug: '%kernel.debug%'
Custom Resolvers
Add new resolver types by implementing DigitalState\PlatformDataBundle\Resolver\ResolverInterface and register them in the bundle’s configuration.
Override Session Data Modify session data before resolution via an event subscriber:
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if ($request->hasSession()) {
$request->getSession()->set('ds.session.user.custom_key', 'value');
}
}
Form Integration Create a custom form extension to auto-resolve session data:
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
class SessionDataExtension extends AbstractTypeExtension
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function ($event) {
$data = $event->getData();
$dataResolver = $this->container->get('ds.data.data');
$data->setDefaultRole($dataResolver->resolve('ds.session.user.role'));
});
}
}
How can I help you explore Laravel packages today?