Прежде чем начать тему, создайте два новых файла в каталоге контроллеров:
Контейнер служб — это шаблон проектирования, который централизует управление зависимостями между объектами, обеспечивая структурированный способ доступа к сервисам и управления ими внутри приложения.
Он действует как реестр услуг на веб-сайте.
Сначала создайте файл с именем Controller.php в каталоге Core. При этом инициализируйте класс 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 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 — это точка приложения, где все настраивается и инициализируется.
$container = new Container(); $container->bind('Core\Database', function () { $config = require base_path('config.php'); return new Database($config['database']); }); App::setContainer($container);
В этом случае процесс начальной загрузки:
Сервисы можно разрешить из контейнера в контроллерах с помощью метода App::resolve().
$db = App::resolve('Core\Database');
Теперь сервисный контейнер правильно построен, и вы можете видеть, что проект работает хорошо.
Надеюсь, вы это ясно поняли.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3