blast-project/outer-extension-bundle
Installation
Add the package to your composer.json:
composer require blast-project/outer-extension-bundle
Register the bundle in config/bundles.php:
return [
// ...
Blast\OuterExtensionBundle\OuterExtensionBundle::class => ['all' => true],
];
First Use Case
Enable outer extensions for a Doctrine entity by annotating it with @OuterExtension:
use Blast\OuterExtensionBundle\Annotation\OuterExtension;
/**
* @OuterExtension
*/
#[ORM\Entity]
class User
{
// ...
}
Verify the extension is registered via:
php bin/console debug:container blast.outer_extension.manager
Entity Integration
@OuterExtension annotation or YAML/XML configuration to mark entities.config/outer_extensions.yaml):
resources:
Blast\YourBundle\Entity\User:
extensions:
- Blast\OuterExtensionBundle\Extension\ExampleExtension
Extension Development
Extend the base OuterExtensionInterface:
namespace Blast\OuterExtensionBundle\Extension;
use Blast\OuterExtensionBundle\Extension\OuterExtensionInterface;
class ExampleExtension implements OuterExtensionInterface
{
public function load(OuterExtensionManager $manager, $entityName): void
{
// Custom logic (e.g., add virtual fields, modify queries)
}
}
Query Modification Hook into Doctrine events via the manager:
$manager = $container->get('blast.outer_extension.manager');
$manager->addListener('user', function (User $user, Event $event) {
// Pre/post-load logic
});
Symfony Service Integration Inject the manager into services:
use Blast\OuterExtensionBundle\Manager\OuterExtensionManager;
class UserService
{
public function __construct(private OuterExtensionManager $extensionManager) {}
}
Annotation vs. Config
php bin/console debug:container --parameters | grep outer_extension
Caching Issues
php bin/console cache:clear
Doctrine Event Conflicts
prePersist). Use unique tags:
$manager->addListener('user', $listener, 'user.pre_persist', 10);
OuterExtensionBundle entries.php bin/console debug:outer-extension
$em = EntityManager::create([], new \Doctrine\DBAL\Configuration());
$manager->setEntityManager($em);
$manager->setMetadataDriver(new CustomDriver());
OuterExtensionManager::loadExtensionsLazy() to defer extension loading until first use.How can I help you explore Laravel packages today?