Before starting the topic, create two new files in controllers directory:
-
destroy.php
that contains the code used to delete a note from the database. -
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:
- Creates a new Container instance ($container)
- Registers services with the container using the
bind
method (e.g., Core\Database) - 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.
Top comments (0)