c33s/propel-di-behavior-bundle
GlorpenPropelBundle first via Composer.composer.json:
composer require c33s/propel-di-behavior-bundle
app/config/config.yml:
propel:
behaviors:
c33s_di: vendor.c33s.propel-di-behavior-bundle.src.C33sPropelDependencyCollectorBehavior
AppKernel.php:
new C33s\PropelDIBehaviorBundle\C33sPropelDIBehaviorBundle(),
// In your model's schema.xml or behavior definition
<behavior name="c33s_di">
<parameter name="service">logger</parameter>
<parameter name="property">logger</parameter>
</behavior>
Model-Level Injection:
schema.xml for a specific model:
<behavior name="c33s_di">
<parameter name="service">twig</parameter>
<parameter name="property">twigEngine</parameter>
</behavior>
$model->twigEngine).Global Injection:
c33s_di_global for shared dependencies across all models:
propel:
behaviors:
c33s_di_global: vendor.c33s.propel-di-behavior-bundle.src.C33sPropelDependencyCollectorBehavior
Query-Level Injection:
Query classes via the same behavior:
<behavior name="c33s_di" class="Query">
<parameter name="service">security.token_storage</parameter>
<parameter name="property">tokenStorage</parameter>
</behavior>
Parameter Injection:
app.path.base) alongside services:
<behavior name="c33s_di">
<parameter name="parameter">app.path.base</parameter>
<parameter name="property">basePath</parameter>
</behavior>
security.token_storage) or aliases defined in services.yml.setService() in tests:
$model->setService('logger', $mockLogger);
Missing GlorpenPropelBundle:
GlorpenPropelBundle. Forgetting this causes silent failures.GlorpenPropelBundle first.Case Sensitivity:
schema.xml must match exactly those in services.yml or parameters.yml.&service) for consistency.Circular Dependencies:
Behavior Overrides:
c33s_di_global) and model-specific behaviors merge. Unexpected behavior may occur if properties clash.globalLogger, modelLogger) to avoid conflicts.Propel Schema Updates:
php bin/console propel:build --no-confirm
var_dump(get_object_vars($model)); // Look for your injected property.
php bin/console debug:container
app.debug=true) to catch initialization errors.C33sPropelDependencyCollectorBehavior to add validation or post-processing:
class CustomDIBehavior extends C33sPropelDependencyCollectorBehavior {
protected function postInject(Model $model) {
// Custom logic after injection.
}
}
__get, __set) to dynamically inject services:
public function __get($name) {
if ($this->container->has($name)) {
return $this->container->get($name);
}
return parent::__get($name);
}
postInsert) to conditionally inject dependencies:
$model->addListener('postInsert', function ($model) {
$model->setService('event_dispatcher', $this->container->get('event_dispatcher'));
});
How can I help you explore Laravel packages today?