soft-passio/user-bundle
Soft Passio User Bundle is a PHP package that bundles user-management functionality for applications, offering reusable user-related components and configurable integration points to simplify account setup and reduce boilerplate.
This is a Symfony bundle, not a Laravel package — before anything else, confirm your project is Symfony 4/5 (the 2020 release date points at Symfony 4.4/5.x). A Laravel app can only use this by manually wiring Symfony's Security, Doctrine, and HttpKernel components, which is almost never worth it.
Minimal steps:
composer require soft-passio/user-bundleSoftPassio\UserBundle\UserBundle in config/bundles.php (Symfony 4+ flexible recipe) or AppKernel::registerBundles().DependencyInjection/Configuration.php and Resources/config/ — the README is thin, and the real contract is the service definitions and the Configuration tree.Model/ or Entity/ directory to see whether users are shipped as a concrete entity or as an abstract base class / traits you're expected to extend.bin/console doctrine:migrations:diff.password_encoder in config/packages/security.yaml to whatever the bundle's user class is.First use case: swap the bundle's user entity into your existing security.yaml provider, run migrations, then exercise registration + login — that path proves the Doctrine mapping, the encoder, and the provider all line up.
Extend, don't fight, the entity. Symfony user bundles almost always expose an AbstractUser or a User class with protected setters. The idiomatic move is to create App\Entity\User extends SoftPassio\...\User in your own src/Entity/, add your domain fields, and point doctrine.orm at your class. Overriding via inheritance keeps bundle upgrades non-destructive.
Provider + firewall wiring. Register a entity provider pointing at your user class and a form-login firewall using the bundle's login route. If the bundle ships its own UserProvider, prefer that only if it adds behavior (e.g. email-based lookup) — otherwise Symfony's built-in entity provider is simpler and better documented.
Events over patching. If the bundle dispatches lifecycle events (registration, password change), hook them with a small EventSubscriber in src/EventSubscriber/. This is the clean place to add welcome emails, audit logs, or role seeding without touching vendor code.
Form types as the integration seam. Bundles of this vintage ship RegistrationFormType / ChangePasswordFormType under Form/. Reuse them via createForm(BundleFormType::class, $user) and add your extra fields through FormEvents::POST_SET_DATA rather than copying the class.
Service decoration. Any service in the bundle can be replaced by declaring a class with the same ID under decorates: in services.yaml. This is the supported way to change validation, token generation, or mailer behavior.
Templates. Copy the bundle's Resources/views/ into templates/bundles/UserBundle/ to override Twig templates per Symfony's bundle override conventions — no bundle forking required.
MakerBundle user scaffolding instead.php: ^7.2 and Symfony 4.4/5.0 constraints. Composer will refuse to install it on PHP 8.2+ or Symfony 6/7 without --ignore-platform-reqs, and even then the deprecated PasswordEncoderInterface and older security.yaml syntax may break.@ORM\Entity on its own class, extending it and mapping the subclass can trigger "duplicate mapping" or "association refers to unmapped class." Check whether the base class is @MappedSuperclass — that's the tell for "extend me."encoder to password_hasher and from getSalt() to SaltedPasswordHasher. If the bundle's User still implements getSalt(), you must either return null or migrate the encoder config explicitly.Resources/migrations/, need to run before any of your own FK-dependent tables. Check the version prefix numbers; collisions with your migrations/ namespace are common.bin/console debug:container --tag=... and bin/console debug:router | grep user. Bundles of this age sometimes use XML service definitions that fail to autoload tags.UserEvent/*Events class? Does it expose a UserManager interface? Without either, every customization becomes a fork — a strong reason to skip it.laravel/breeze or laravel/fortify, which cover the same ground with maintained code and native Eloquent integration.How can I help you explore Laravel packages today?