Installation
composer require aimeos/ai-fosuser
Ensure aimeos/aimeos-laravel is also installed as a dependency.
Configuration
Add the bundle to config/app.php under providers:
Aimeos\FOSUser\FOSUserServiceProvider::class,
Publish the config:
php artisan vendor:publish --provider="Aimeos\FOSUser\FOSUserServiceProvider" --tag="config"
Update config/aimeos.php to include:
'fosuser' => [
'adapter' => [
'classname' => 'Aimeos\FOSUser\Adapter\FOSUser',
'param' => [
'service' => 'fos_user.user_manager', // Symfony FOSUser service
],
],
],
First Use Case Sync FOSUser data to Aimeos:
use Aimeos\FOSUser\Manager\FOSUser;
$fosUserManager = app(FOSUser::class);
$fosUserManager->sync();
Verify users in Aimeos admin panel (/admin).
User Synchronization
php artisan aimeos:fosuser:sync
app/Console/Kernel.php):
$schedule->command('aimeos:fosuser:sync')->daily();
$fosUserManager->sync(['roles' => ['ROLE_ADMIN']]);
Integration with Aimeos Services
$customerManager = app(\Aimeos\MShop\Customer\Manager\Standard::class);
$customer = $customerManager->findItem('customer', ['email' => 'user@example.com']);
$orderManager->saveItem($order->setCustomerId($customer->getCustomerID()));
Event Listeners
// app/Providers/EventServiceProvider.php
protected $listen = [
'fos_user.user_registered' => [
'Aimeos\FOSUser\EventListener\SyncUserListener',
],
];
config/aimeos.php:
'fosuser' => [
'mapping' => [
'customer' => [
'email' => 'email',
'firstname' => 'firstname',
'lastname' => 'lastname',
'password' => 'plain_password', // Hash in Aimeos
],
],
],
$fosUserManager->sync(['batch_size' => 100]);
Password Handling
$hashedPassword = password_hash($fosUser->getPlainPassword(), PASSWORD_DEFAULT);
$customer->setPassword($hashedPassword);
config/packages/fos_user.yaml:
from: FOS\UserBundle\Security\LoginFormAuthenticator
arguments:
- '@fos_user.user_manager'
- '@security.password_hasher'
Duplicate Users
email is unique in both FOSUser and Aimeos. Use upsert for updates:
$fosUserManager->sync(['upsert' => true]);
Role Conflicts
$customer->setGroups(['customer', 'admin']); // Aimeos groups
Sync Logs: Enable logging in config/aimeos.php:
'fosuser' => [
'debug' => true,
],
Check storage/logs/laravel.log for sync details.
Validation Errors: Use --verbose flag for CLI commands:
php artisan aimeos:fosuser:sync --verbose
Custom Adapters
Extend Aimeos\FOSUser\Adapter\FOSUser for custom logic:
namespace App\Aimeos\FOSUser\Adapter;
use Aimeos\FOSUser\Adapter\FOSUser as BaseAdapter;
class CustomFOSUserAdapter extends BaseAdapter {
public function syncUser($fosUser) {
// Custom logic (e.g., skip inactive users)
if (!$fosUser->isEnabled()) return null;
return parent::syncUser($fosUser);
}
}
Register in config/aimeos.php:
'fosuser' => [
'adapter' => [
'classname' => 'App\Aimeos\FOSUser\Adapter\CustomFOSUserAdapter',
],
],
Webhooks
Use Laravel’s queue:work to process syncs asynchronously:
$fosUserManager->sync()->onQueue('sync_users');
Testing Mock FOSUser in tests:
$this->app->instance('fos_user.user_manager', $mockUserManager);
How can I help you explore Laravel packages today?