MaplePHP
  • MaplePHP - Layered structure MVC PHP framework
  • Guide
    • Get started
    • Installation
    • Service Provider
    • Dependency injector
    • Controller
    • Middlewares
    • Routers
  • Navigation
    • Simple navigation
    • Dynamic navigation
  • Template engine
    • Getting started
    • Templates
      • Index
      • Views
      • Partials
    • Content (DTO)
      • String
      • Number
      • Array
      • DateTime
      • Encode
      • Dom
  • Form builder
    • Form builder
  • Database
    • MySQL
  • Service providers
    • url
    • encode
    • dir
    • DB
    • responder
  • Installations
    • Authorization & login
  • Frontend template
    • Responder
    • Views & components
    • Modals
    • Redirects
  • Access
    • MaplePHP with Docker
  • Libraries
    • Container
    • MySQL queries
    • Validation
    • Cache
    • Logger
    • Request
    • Response
  • What is?
    • Dependency injector
    • Controller
    • Middleware
    • Router
Powered by GitBook
On this page
  • What is a Dependency injector?
  • How do I access the Dependency injector?

Was this helpful?

  1. Guide

Dependency injector

What is a Dependency injector?

Instead of creating objects directly in your code, you can pass them in as dependencies. It let´s you effortlessly integrate your services into other services and controllers. But what does this mean?

Suppose you have four service classes named:

  • Http\Services\YourFirstService

  • Http\Services\YourSecondService

  • Http\Services\YourThirdService

  • Http\Services\YourFourthService

YourSecondService serve as dependencies for YourFirstService, while YourFourthService is dependent on YourThirdService.

1. Without a Dependency Injector

Without a Dependency Injector, you might handle it like this (not recommended):

<?php
namespace Http\Controllers;

use Http\Services\YourFirstService;
use Http\Services\YourSecondService;
use Http\Services\YourThirdService;
use Http\Services\YourFourthService;

class Pages
{
    public function __construct()
    {
        $yourSecondService = new YourSecondService();
        $yourFourthService = new YourFourthService();
        $yourThirdService = new YourThirdService($yourFourthService);
        $yourFirstService = new YourFirstService($yourSecondService);
        // YourFirstService, YourFirstService, YourThirdService, YourFourthService
        // Has been initiated
    }
}

Even though this is a simple example where class objects have a maximum of 2 levels, it still looks somewhat messy. But imagine if the classes had 4 levels of dependencies – without a dependency injector, you would lose control.

2. With the Dependency Injector

With the Dependency Injector, you can streamline the process:

<?php
namespace Http\Controllers;

use Http\Services\YourFirstService;
use Http\Services\YourThirdService;

class Pages
{
    public function __construct(YourFirstService $yourFirstService, YourThirdService $yourThirdService)
    {
        // YourFirstService, YourSecondService, YourThirdService, YourFourthService
        // Has been initiated
    }
}

Not as complicated anymore, thanks to the Dependency Injector, which automatically resolves all dependencies. That is what makes the Dependency injector a valuable tool in your arsenal.

How do I access the Dependency injector?

Controllers will have the Dependency injector loaded by default. This means that if you load a Service class in your Controller, all dependencies of that Service will be automatically resolved and so on until all Services/dependencies has been initiated.

The Dependency Injector is specifically designed to work with the __construct method. However, you can still access it manually within a regular method like this:

<?php
namespace Http\Controllers;

use MaplePHP\Foundation\Http\Provider;
use Http\Services\YourFirstService;
use Http\Services\YourThirdService;

class Pages
{
    private $provider;
    
    public function __construct(Provider $provider, YourFirstService $yourFirstService)
    {
        // Provider, YourFirstService, YourSecondService
        // Has been initiated
        
        $this->provider = $provider;
    }
    
    public function aboutUs($response, $request)
    {
        $this->provider->set("yourThirdService", YourThirdService::class);
        // YourThirdService, YourFourthService
        // Has been initiated
        
        $this->provider->yourThirdService()->yourMethod();
    }
}

Don't worry if you don't fully comprehend what the Dependency Injector is and how it works. In the next step, I will start showing you some working examples. Let's move on and talk about the Controller.

PreviousService ProviderNextController

Last updated 1 year ago

Was this helpful?