Home  >  Article  >  Backend Development  >  Service Container Bootstrap: Getting Started

Service Container Bootstrap: Getting Started

PHPz
PHPzOriginal
2024-07-16 16:21:59587browse

Service Container Bootstrap: Getting Started

Before starting the topic, create two new files in controllers directory:

  1. destroy.php that contains the code used to delete a note from the database.
  2. store.php that contains the code to create a new note using forms and request methods.

Intro to Service Container

A Service Container is a design pattern that centralizes the management of dependencies between objects, providing a structured way to access and manage services within an application.

It acts as a registry for services within a website.

Container Class

Firstly create a file named Controller.php in Core directory. In this initialize the Container class, that is responsible for managing service bindings and resolutions.

  • bind(): Registers a service with the container.
  • resolve(): Retrieves a service from the container.
class Container {
    protected $bindings = [];

    public function bind($key, $resolver) {
        $this->bindings[$key] = $resolver;
    }

    public function resolve($key) {
        if (!array_key_exists($key, $this->bindings)) {
            throw new Exception("No matching binding found for {$key}");
        }
        $resolver = $this->bindings[$key];
        return call_user_func($resolver);
    }
}

App Class

The App class acts as a interface for the Container, providing a convenient interface for accessing services.

  • setContainer(): Sets the container instance for the App.
  • container(): Retrieves the container instance.
  • bind(): Registers a service with the container.
  • resolve(): Retrieves a service from the container.
class App {
    protected static $container;

    public static function setContainer($container) {
        static::$container = $container;
    }

    public static function container() {
        return static::$container;
    }

    public static function bind($key, $resolver) {
        static::container()->bind($key, $resolver);
    }

    public static function resolve($key) {
        return static::container()->resolve($key);
    }
}

Bootstrap

Bootstrap is a point of an application, where everything is set up and initialized.

$container = new Container();
$container->bind('Core\Database', function () {
    $config = require base_path('config.php');
    return new Database($config['database']);
});
App::setContainer($container);

In this , the bootstrap process:

  1. Creates a new Container instance ($container)
  2. Registers services with the container using the bind method (e.g., CoreDatabase)
  3. Sets the container for the App using App::setContainer($container)

Controller

Services can be resolved from the container in controllers using the App::resolve() method.

$db = App::resolve('Core\Database');

Now a service container is properly built and you can see the project is working well.

I hope that you have clearly understood it.

The above is the detailed content of Service Container Bootstrap: Getting Started. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn