Installation
Add the bundle to your composer.json:
composer require ekyna/user-bundle
Register in config/bundles.php:
Ekyna\UserBundle\EkynaUserBundle::class => ['all' => true],
Database Migration Run migrations (if provided) or manually create tables based on FOSUserBundle schema (this bundle extends it). Key tables:
fos_user (core user data)fos_user_group (groups/roles)ekyna_user_profile (extended profile fields)First Use Case: User Registration
Extend the default FOSUser registration controller or use Ekyna’s admin interface (if EkynaAdminBundle is integrated):
// routes.yaml
ekyna_user_registration_register: ~
Test registration at /register (default route).
User CRUD via AdminBundle
If EkynaAdminBundle is installed, users/groups are managed via its UI. Example admin config:
# config/packages/ekyna_admin.yaml
ekyna_admin:
resources:
Ekyna\UserBundle\Entity\User:
list: [id, username, email, enabled]
edit: [username, email, groups]
Profile Extension
Extend User entity with custom fields (e.g., profile):
// src/Entity/User.php
/**
* @ORM\OneToOne(targetEntity="Ekyna\UserBundle\Entity\UserProfile", mappedBy="user", cascade={"persist", "remove"})
*/
private $profile;
Authentication Use Symfony’s security system with FOSUserBundle’s providers:
# config/packages/security.yaml
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
API Integration Serialize user data for APIs (e.g., with API Platform or custom serializers):
use Ekyna\UserBundle\Entity\User;
use Symfony\Component\Serializer\Annotation\Groups;
class User implements \Serializable {
/**
* @Groups({"api"})
*/
public function getFullName() { ... }
}
UserRegisteredEvent) for post-registration logic:
// src/EventListener/UserListener.php
public function onUserRegistered(UserRegisteredEvent $event) {
$user = $event->getUser();
$user->setProfile(new UserProfile());
$this->entityManager->persist($user);
}
User entity.templates/EkynaUserBundle/.Deprecated Dependencies
Ekyna\UserBundle\Form\Type\PhoneType (e.g., with symfony/validator constraints).Translation Issues
translations/messages.en.yaml to replace FOSUserBundle’s username-based labels:
'user.username.label': 'Email Address'
Routing Conflicts
/account/) may clash with other bundles. Override in config/routes.yaml:
ekyna_user:
resource: "@EkynaUserBundle/Resources/config/routing.yml"
prefix: /user
AdminBundle Dependency
EkynaAdminBundle, user management falls back to FOSUserBundle’s templates (deprecated). Use make:controller to build custom admin routes.UserProfile) are correctly mapped in User.php:
// Ensure bidirectional relationships
$profile->setUser($this);
$this->profile = $profile;
php bin/console debug:security
php bin/console cache:clear
Custom Fields
Add fields to UserProfile entity and update the form type (Ekyna\UserBundle\Form\Type\UserProfileType).
Email Templates
Override Twig templates in templates/EkynaUserBundle/Email/ (e.g., registration.html.twig).
API Tokens
Integrate with lexik/jwt-authentication-bundle for token-based auth:
# config/packages/security.yaml
firewalls:
api:
pattern: ^/api
stateless: true
jwt: ~
How can I help you explore Laravel packages today?