0

我已经声明了一个在 service.yml 中有一些依赖的服务,例如:

content_helper:
    class:        Oilproject\ContentBundle\Helper\ContentHelper
    arguments:    ["@doctrine.orm.entity_manager", "@memcache.default"]
    calls:
                - [setMemcache, ["@memcache.default"]]

我的助手类:

private $em;

    private $memcache;

    public function __construct(\Doctrine\ORM\EntityManager $em) {
        $this->em = $em;
        $this->memcache = $memcache;
    }

    public function setMemcache($memcache) {
        $this->memcache = $memcache;

        return $this;
    }
//...

但是当我打电话时

$memcache = $this->memcache;
$contents = $memcache->get($key);

这次回归

Call to a member function get() on a non-object ... 
4

1 回答 1

0

不需要同时使用 setter 注入构造函数注入。

此外,您忘记将 memcache 又名第二个预期参数添加到构造函数。在创建对象/服务后,您当前的构造函数注入实现$this->memcache将始终是null/a作为异常状态。non-object

尝试这个:

配置:

content_helper:
    class:        Vendor\Your\Service\TheClass
    arguments:    ["@doctrine.orm.entity_manager", "@memcache.default"]

班级

private $em;
private $memcache;

public function __construct(\Doctrine\ORM\EntityManager $em, $memcache) {
    $this->em = $em;
    $this->memcache = $memcache;
}

// example usage
public function someFunction()
{
    return $this->memcache->get('key');
}

确保在实例化新创建的服务时,要么将其注入到要使用它的其他服务中,要么从那里的容器中获取它。否则不会注入 memcache 服务。例子:

 // getting i.e. inside a controller with access to the container
 $value = $this->container->get('content_helper')->someFunction();
于 2013-10-29T16:52:04.900 回答