digitalmania/sonata-user-bundle
Installation:
composer require digitalmania/sonata-user-bundle
Register the bundle in config/bundles.php:
return [
// ...
DigitalMania\SonataUserBundle\SonataUserBundle::class => ['extends' => 'FOSUserBundle'],
];
Database Setup: Run migrations (if using Doctrine):
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
First Use Case:
Access the admin interface at /admin (ensure sonata_admin is installed) to manage users/groups via Sonata’s UI.
config/packages/sonata_user.yaml (or auto-generated).templates/SonataUserBundle/ (e.g., security/login.html.twig).Sonata\UserBundle\Entity\User in src/Entity/User.php for custom fields.User Management:
/admin/app/user) to CRUD users/groups via UI.phone to User):
// src/Entity/User.php
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
class User extends BaseUser {
private $phone;
// ... getters/setters
}
Authentication:
SonataUserBundle:Security:login template.config/packages/sonata_user.yaml:
sonata_user:
security:
login:
form:
fields:
- username
- password
- _remember_me
Group Permissions:
$user->addRole('ROLE_ADMIN');
$manager->persist($user);
$manager->flush();
Profile Management:
/profile/address):
# config/packages/sonata_user.yaml
sonata_user:
profile:
tabs:
- { label, route, template }
sonata.user.secure voter for custom access checks.SonataMediaBundle) for media-rich profiles.use Symfony\Component\Serializer\Annotation\Groups;
class User {
/**
* @Groups({"api"})
*/
public $username;
}
Bundle Extension Conflict:
FOSUserBundle, ensure no duplicate configurations (e.g., fos_user in config/packages/).FOSUserBundle from bundles.php if using Sonata’s version.Template Overrides:
SonataUserBundle:Security:login extends base.html.twig).php bin/console cache:clear) after template changes.Entity Inheritance:
BaseUser requires proper __construct() chaining:
public function __construct() {
parent::__construct();
$this->addRole('ROLE_USER'); // Default role
}
Admin Route Conflicts:
/admin vs. /app)._sonata_admin prefix or customize routes in sonata_admin.yaml.Permission Denied:
dd($this->getUser()->getRoles()) in controllers.Form Validation Errors:
User entity:
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Assert\NotBlank
*/
private $phone;
Cache Issues:
Custom Fields:
User entity and update the form type:
// src/Form/Type/UserType.php
$builder->add('phone', TextType::class);
Event Listeners:
sonata.user.register):
// src/EventListener/UserListener.php
use Sonata\UserBundle\Event\SonataUserEvents;
public function onRegister(UserEvent $event) {
$user = $event->getUser();
$user->addRole('ROLE_CUSTOM');
}
Register in services.yaml:
services:
App\EventListener\UserListener:
tags:
- { name: kernel.event_listener, event: sonata.user.register, method: onRegister }
API Endpoints:
#[Route('/api/user', name: 'api_user')]
public function getUser(UserInterface $user): JsonResponse {
return new JsonResponse($user->getRoles());
}
Profile Tabs:
# config/services.yaml
App\Sonata\UserBundle\ProfileTab:
tags:
- { name: sonata.user.profile.tab, label: 'Custom Tab', route: 'app_custom_tab' }
How can I help you explore Laravel packages today?