Installation:
composer require bkstg/fos-user-bundle
Ensure friendsofsymfony/user-bundle and midnightluke/group-security-bundle are also installed (required dependencies).
Configuration:
Add the bundle to config/bundles.php:
return [
// ...
Backstage\FosUserBundle\BackstageFosUserBundle::class => ['all' => true],
];
Database Migrations:
Run migrations to create the fos_user and fos_user_group tables:
php artisan migrate
First Use Case: Register a new user via the built-in registration form (if enabled) or programmatically:
use Backstage\FosUserBundle\Model\UserManager;
use Symfony\Component\HttpFoundation\Request;
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setUsername('testuser');
$user->setPlainPassword('password');
$user->setEmail('test@example.com');
$userManager->updateUser($user);
User Management:
UserManager to handle user lifecycle:
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setEnabled(true); // Enable/disable users
$userManager->updateUser($user);
$tokenGenerator = $this->container->get('fos_user.util.token_generator');
$token = $tokenGenerator->generateToken();
Group Integration:
GroupSecurityBundle):
$groupManager = $this->container->get('midnightluke_group_security.group_manager');
$group = $groupManager->findGroupBy(['name' => 'admin']);
$user->addGroup($group);
$userManager->updateUser($user);
Authentication:
# config/packages/security.yaml
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
Custom User Fields:
Extend the User entity (e.g., App\Entity\User) and update the UserManager:
// src/Entity/User.php
class User extends BaseUser
{
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $customField;
}
Event Listeners:
Subscribe to FOSUserBundle events (e.g., UserRegisteredEvent):
// src/EventListener/UserListener.php
class UserListener
{
public function onUserRegistered(UserRegisteredEvent $event)
{
$user = $event->getUser();
// Custom logic (e.g., send welcome email)
}
}
Register in services.yaml:
services:
App\EventListener\UserListener:
tags:
- { name: kernel.event_listener, event: fos_user.user_registered, method: onUserRegistered }
Missing Dependencies:
friendsofsymfony/user-bundle or midnightluke/group-security-bundle will break the bundle. Verify composer.json includes:
"require": {
"friendsofsymfony/user-bundle": "^2.0",
"midnightluke/group-security-bundle": "^1.0"
}
Configuration Overrides:
config/packages/fos_user.yaml carefully:
fos_user:
db_driver: orm
firewall_name: main
user_class: App\Entity\User
Group Permissions:
GroupSecurityBundle requires explicit permission definitions. Define roles in security.yaml:
security:
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_GROUP_ADMIN]
Token Expiry:
fos_user.yaml:
fos_user:
resetting:
token_ttl: 86400 # 1 day in seconds
User Not Found:
user_class in fos_user.yaml matches your extended User entity.fos_user, fos_user_group) for records.Authentication Failures:
firewall_name in fos_user.yaml matches your security firewall.php bin/console debug:security to validate providers.Event Listeners Not Triggering:
fos_user.user_registered vs. fos_user.registered).bin/console debug:event-dispatcher to list available events.Custom User Provider: Extend the default provider for custom logic:
// src/Security/UserProvider.php
class CustomUserProvider implements UserProviderInterface
{
public function loadUserByUsername($username)
{
// Custom logic
}
}
Register in security.yaml:
security:
providers:
custom_provider:
id: App\Security\UserProvider
Form Types:
Override FOSUserBundle’s form types (e.g., RegistrationFormType) in config/packages/fos_user.yaml:
fos_user:
registration:
form:
type: App\Form\RegistrationFormType
Templates:
Override default templates (e.g., registration.html.twig) in templates/FOSUserBundle/.
How can I help you explore Laravel packages today?