Kernel extension) but can be adapted for Laravel with minimal effort due to shared PHP/Symfony components (e.g., Messenger, Doctrine, Redis). Key features like health checks, logging (MongoDB/Sentry), permissions, and exception handling align well with Laravel’s ecosystem if wrapped in Laravel’s service container.AnzuKernel extension forces architectural changes (e.g., replacing Laravel’s Kernel).symfony/event-dispatcher).queue system or a custom adapter.Kernel, health checks).Kernel cannot extend AnzuKernel directly; a facade or decorator pattern would be needed.Events system differs from Symfony’s EventDispatcher; middleware or listeners would require refactoring._doctrine_migration_versions) would fail.symfony/messenger, symfony/security, symfony/var-exporter are required but compatible with Laravel.mongodb/mongodb or Laravel’s jenssegers/mongodb.ROLE_SUPER_ADMIN, MongoDB collection renames, routing shifts). Risk mitigated by strict version pinning in composer.json.symfony/var-exporter:^7.0|^8.0).modules: []) to reduce latency.queue:work).appReadOnlyMode flag enables graceful degradation but requires application-level validation (e.g., middleware to block writes).Auth is integrated with Symfony’s Security (may need spatie/laravel-permission bridge).EventDispatcher with Laravel’s Events via a service provider.health_check.enabled: false)..env; Symfony uses env(). The bundle expects env() calls (e.g., ANZU_MONGODB_APP_LOG_URI). Use Laravel’s env() helper or a custom wrapper.11.x) to avoid BC breaks. Monitor anzusystems/contracts for shared interfaces.| Feature | Symfony Fit | Laravel Fit | Mitigation |
|---|---|---|---|
| Kernel Extension | Native | ❌ (Replace with facade/decorator) | Create AnzuKernelAdapter class. |
| Health Checks | Native (Doctrine) | ⚠️ (Doctrine optional) | Disable or mock Doctrine checks. |
| Logging (MongoDB/Sentry) | Native (Messenger) | ⚠️ (Use Laravel Queues) | Bind Messenger to Laravel’s queue system. |
| Permissions (RBAC) | Native (Security) | ⚠️ (Bridge to Spatie/Laravel Auth) | Use spatie/laravel-permission + adapter. |
| Exception Handling | Native (EventListener) | ⚠️ (Replace with Middleware) | Convert ExceptionListener to Laravel middleware. |
| Value Objects | Native | Native (PHP 8.1+) | No changes needed. |
| Argument Resolvers | Native | ⚠️ (Laravel uses Illuminate\Pipeline) |
Replace with Laravel’s resolveClass hooks. |
Phase 1: Dependency Setup
composer require anzusystems/common-bundle --no-scripts
composer require symfony/messenger symfony/security-bundle symfony/var-exporter
composer.json for putenv:
"extra": { "runtime": { "use_putenv": true } }
Phase 2: Kernel Adaptation
AnzuKernel directly.Illuminate\Foundation\Application:
// app/Providers/AnzuKernelServiceProvider.php
use AnzuSystems\CommonBundle\Kernel\AnzuKernel;
class AnzuKernelServiceProvider extends ServiceProvider {
public function register() {
$this->app->extend('kernel', function ($kernel) {
return new AnzuKernelAdapter($kernel, [
'appSystem' => env('APP_SYSTEM', 'core'),
'appVersion' => env('APP_VERSION', '1.0.0'),
'appReadOnlyMode' => env('APP_READ_ONLY_MODE', false),
]);
});
}
}
config/app.php.Phase 3: Configuration
config/packages/anzu_common.yaml (Laravel uses config/anzu_common.php):
return [
'settings' => [
'app_redis' => 'redis',
'user_entity_class' => App\Models\User::class,
// ... other settings
],
// ... rest of config
];
$this->mergeConfigFrom(__DIR__.'/anzu_common.php', 'anzu_common');
Phase 4: Feature-Specific Adaptations
// config/anzu_common.php
'logs' => [
'messenger_transport' => [
'name' => 'core_log',
'dsn' => 'laravel-queue://core_log',
],
],
// app/Providers/AnzuPermissionServiceProvider.php
use AnzuSystems\CommonBundle\Security\Permission\PermissionManager;
class AnzuPermissionServiceProvider extends ServiceProvider {
public function register() {
$this->app->singleton(PermissionManager::class, function () {
return new SpatiePermissionAdapter();
});
}
}
health_check:
enabled: true
modules: [AnzuSystems\CommonBundle\HealthCheck\Module\RedisModule]
Phase 5: Testing
AnzuKernel and test adapters.How can I help you explore Laravel packages today?