Dependency Injection in Slim Framework - passing Container into your own classes

前端 未结 2 1983
悲&欢浪女
悲&欢浪女 2020-12-18 08:25

I\'ve already commented on this thread but it seems to be dead so I\'m opening a new one: Dependency Injection Slim Framework 3

The post above explains how pass Slim

2条回答
  •  太阳男子
    2020-12-18 09:01

    The simplest way to do this is like so:

    index.php

    $app->get('/mytest', '\TestController:mytest');
    

    TestController.php

    class TestController {
    
        protected $ci;
    
        public function __construct(Slim\Container $ci) {
            //var_dump($ci);
            $this->ci = $ci;
        }
    
        public function mytest() {
            $sql = ''; // e.g. SQL query
            $stmt = $this->ci->db->prepare($sql);
        }
    }
    

    I'm not sure if this is the "correct" way of doing it, but what happens is that the constructor of TestController receives the container as the first argument. This is mentioned in their documentation: http://www.slimframework.com/docs/objects/router.html#container-resolution

    So when you're using a function like TestController::mytest() it has access to anything in the container, such as the PDO Database instance you set up in index.php (if following their First Application example tutorial).

    As I say, I'm not sure if that's the "right" way of doing it, but it works.

    If you uncomment the var_dump($ci) line in you'll see the Slim Container object.

    If anyone has any feedback on this please comment as I'd be interested in knowing.

提交回复
热议问题