Installation Add the bundle via Composer:
composer require baikal/kernel-bundle
Register the bundle in config/bundles.php (Symfony context):
return [
// ...
Baikal\KernelBundle\BaikalKernelBundle::class => ['all' => true],
];
First Use Case The bundle provides a kernel abstraction layer for Symfony applications, allowing seamless integration with Baïkal (a CalDAV/CardDAV server). Start by leveraging its event system or kernel extensions for custom logic.
Example: Subscribe to kernel events in a service:
use Baikal\KernelBundle\Event\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class MyEventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
KernelEvents::BOOT => 'onKernelBoot',
];
}
public function onKernelBoot()
{
// Custom logic here
}
}
Where to Look First
src/Event/ for available events (e.g., KernelEvents::BOOT, KernelEvents::TERMINATE).src/DependencyInjection/ for compiler passes or extensions.Resources/config/services.yaml for default services.Event-Driven Logic
Use the bundle’s events to hook into kernel lifecycle phases (e.g., BOOT, TERMINATE, REQUEST). Example:
// Subscribe to TERMINATE for cleanup
KernelEvents::TERMINATE => [$this, 'onKernelTerminate'],
Kernel Extensions Extend the kernel behavior via compiler passes or service overrides. Example:
# config/packages/baikal_kernel.yaml
baikal_kernel:
extensions:
- App\Extension\MyCustomExtension
Baïkal Integration If using Baïkal (CalDAV/CardDAV), leverage the bundle to:
use Baikal\KernelBundle\Middleware\BaikalRequestMiddleware;
// Add to kernel middleware (Symfony 5.3+)
$middleware->add(BaikalRequestMiddleware::class);
Configuration Overrides Override default Baïkal settings via bundle configuration:
baikal_kernel:
auth:
enabled: true
provider: "custom_auth_service"
$event = new KernelEvent($kernel);
$this->dispatcher->dispatch(KernelEvents::BOOT, $event);
config/packages/dev/baikal_kernel.yaml:
baikal_kernel:
debug: true
Event Dispatching Order
BOOT fire before the request is processed. Use REQUEST for request-specific logic.Request object in BOOT if it hasn’t been initialized yet.Baïkal Dependency
RuntimeException. Validate dependencies early:
if (!extension_loaded('baikal')) {
throw new \RuntimeException('Baïkal extension not loaded.');
}
Configuration Conflicts
baikal_kernel settings in multiple places (e.g., config/packages/ and config/bundles.php) may cause silent failures. Use environment-specific configs (e.g., dev/, prod/).Middleware Stack
BaikalRequestMiddleware is placed before other middleware that might alter the request early.Enable Verbose Logging
Add to config/packages/dev/monolog.yaml:
handlers:
baikal:
type: stream
path: "%kernel.logs_dir%/baikal.log"
level: debug
channels: ["baikal_kernel"]
Check Event Subscribers
Use Symfony’s debug:event-dispatcher command to list subscribed events:
php bin/console debug:event-dispatcher
Compiler Passes
If extensions aren’t loading, verify compiler passes in src/DependencyInjection/ are registered in BaikalKernelBundle::build().
Custom Events Extend the bundle by dispatching your own events:
$this->dispatcher->dispatch(new MyCustomEvent($data));
Kernel Listeners
Implement Baikal\KernelBundle\EventListener\KernelListenerInterface for custom listeners:
class MyListener implements KernelListenerInterface
{
public function handle(KernelEvent $event) { ... }
}
Service Overrides Override services via autowiring or YAML:
services:
Baikal\KernelBundle\Service\DefaultService:
class: App\Service\CustomService
How can I help you explore Laravel packages today?