b4rb4ross4/symfony-user-bundle
Installation
composer require b4rb4ross4/symfony-user-bundle "@dev"
Ensure your project uses Symfony 3.x, PHP 7.1+, and Doctrine ORM.
Enable the Bundle
Register in config/bundles.php (Symfony 3.3+):
return [
// ...
B4rb4ross4\UserBundle\UserBundle::class => ['all' => true],
];
Configure Routes
Add to config/routes.yaml:
b4rb4ross4_user:
resource: '@B4rb4ross4UserBundle/Controller/'
type: annotation
Security Configuration
Update config/packages/security.yaml:
firewalls:
main:
form_login:
check_path: b4rb4ross4_user_login
login_path: b4rb4ross4_user_login
logout:
path: b4rb4ross4_user_logout
Twig Base Template
Set in config/packages/twig.yaml:
twig:
globals:
user_base_view: "%b4rb4ross4.user.base_view%"
Define the parameter in config/packages/parameters.yaml:
parameters:
b4rb4ross4.user.base_view: 'backend/base.html.twig'
First Use Case
Extend the User entity (located at src/Entity/User.php by default) to add custom fields:
use B4rb4ross4\UserBundle\Entity\User as BaseUser;
class User extends BaseUser {
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $customField;
}
Authentication Flow
b4rb4ross4_user_login/b4rb4ross4_user_logout).B4rb4ross4UserBundle:User:login.html.twig.User Management
UserController). Override methods in a custom controller to extend functionality.
// src/Controller/CustomUserController.php
use B4rb4ross4\UserBundle\Controller\UserController as BaseUserController;
class CustomUserController extends BaseUserController {
public function editAction(Request $request, User $user) {
// Custom logic before/after parent edit
return parent::editAction($request, $user);
}
}
B4rb4ross4UserBundle:User:register.html.twig or the registerAction in a custom controller.Role-Based Access Control (RBAC)
User entity:
$user->addRole('ROLE_ADMIN');
$em->persist($user);
$em->flush();
security.yaml:
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
Twig Integration
{{ app.user.fullName }} {# Assuming a custom getter in User entity #}
backend/base.html.twig) to include user-specific UI elements (e.g., dropdown menus).Event Listeners
user.registered, user.updated) by implementing UserEvents:
use B4rb4ross4\UserBundle\Event\UserEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserEventSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [
UserEvents::REGISTERED => 'onUserRegistered',
];
}
public function onUserRegistered(UserEvent $event) {
// Send welcome email, etc.
}
}
Entity Inheritance
User entity, ensure the parent class (B4rb4ross4\UserBundle\Entity\User) is properly referenced in your User class:
use B4rb4ross4\UserBundle\Entity\User as BaseUser;
class User extends BaseUser { ... }
parent::__construct() in your custom User constructor can break serialization/deserialization.Route Conflicts
/login, /register) may conflict with existing routes. Use _prefix in routing.yml to namespace them:
b4rb4ross4_user:
resource: '@B4rb4ross4UserBundle/Controller/'
type: annotation
prefix: /auth
Security Configuration
security.yaml (e.g., incorrect check_path or login_path) will break authentication. Always test login/logout flows after changes.anonymous: ~ is set if you want public access to some routes while others require authentication.Twig Variables
app.user). If these don’t appear, verify:
config.yml is imported (imports: [@B4rb4ross4UserBundle/Resources/config/config.yml]).user_base_view parameter is correctly set.Doctrine Lifecycle Callbacks
@ORM\PrePersist/@ORM\PostUpdate in the User entity, ensure they don’t conflict with the bundle’s built-in logic. Test with a fresh user record.Enable Debug Mode
Set APP_DEBUG=true in .env to see detailed errors (e.g., missing routes, entity issues).
Check Event Dispatching
If events (e.g., UserEvents::REGISTERED) aren’t firing, verify:
Database Schema
After extending the User entity, run:
php bin/console doctrine:schema:update --force
to apply new fields.
Custom Controllers
Override any controller method by extending the base class (e.g., UserController). Example:
// src/Controller/UserController.php
use B4rb4ross4\UserBundle\Controller\UserController as BaseController;
class UserController extends BaseController {
public function showAction(User $user) {
// Custom logic
return $this->render('custom/user_show.html.twig', ['user' => $user]);
}
}
Custom Forms Replace the default registration/login forms by:
templates/user/register.html.twig).B4rb4ross4\UserBundle\Form\UserType).API Integration
For API-based auth, replace the form login with a custom AuthenticationProvider:
security:
firewalls:
api:
stateless: true
anonymous: ~
provider: api_token
Then create a custom TokenAuthenticator.
Email Services
Extend the bundle’s email logic by overriding the UserMailer service or creating a decorator:
services:
b4rb4ross4.user.mailer.decorated:
decorates: b4rb4ross4.user.mailer
arguments: ['@b4rb4ross4.user.mailer.decorated.inner']
How can I help you explore Laravel packages today?