This is an outdated version of the Manual. Visit the NEW Manual

Dependency Injection

RedBeanPHP 3.2 and higher supports Dependency Injection. Dependency Injection is a way to keep your models free from dependencies, reducing coupling. Here is how DI works in RedBeanPHP:


    
//Dependencies
    
class Dependency_Coffee {}
    class 
Dependency_Cocoa {}

    
//The model that needs these things
    
class Model_Geek extends RedBean_SimpleModel {
    private 
$cocoa;
    private 
$coffee;
    public function 
setCoffee(Dependency_Coffee $coffee) {
        
$this->coffee $coffee;
    }
    public function 
setCocoa(Dependency_Cocoa $cocoa) {
        
$this->cocoa $cocoa;
    }
    public function 
getCoffee() {
        return 
$this->coffee;
    }
    ..
same for cocoa..
    }

First, we need to tell RedBeanPHP we would like to use DI. RedBeanPHP ships with a very decent injector which can be extended if necessary:


    $di 
= new RedBean_DependencyInjector;
    
RedBean_ModelHelper::setDependencyInjector$di );

Now, add the services to your injector:


    $di
->addDependency('Coffee',new Dependency_Coffee);
    
$di->addDependency('Cocoa',new Dependency_Cocoa);

That's all. Let's get our caffeinated geek!


    $geek 
R::dispense('geek');
    
$coffee $geek->getCoffee(); //returns the coffee

This is how dependency injection in RedBeanPHP 3.2 and higher works. If you need even more flexibility you can override the getModelForBean( $bean ) method in the Bean Helper, this method returns the model for the bean. Here you can bootstrap your own dependency injector. In this method you can call RedBean_ModelHelper::factory($modelName) to obtain a model (and it's dependencies).


 
 

RedBeanPHP Easy ORM for PHP © 2014 Gabor de Mooij and the RedBeanPHP community - Licensed New BSD/GPLv2