最新消息:文章中包含代码时,请遵守代码高亮规范!

symfony中使用__construct获取services对象【原创】

PHP Pota 433浏览 0评论

symfony中服务的使用总所周知的方便,但是当一个controller多次使用到同一个服务的时候就会出现在每个Action中都get获取服务,此时为了省事相信你也尝试使用构造函数申明一个私有对象避免多次使用,如果服务没问题此时使用

private $conn;
private $sql;
public function __construct($container)
{
    $this->conn = $this->get('database_connection');
    $this->sql = $this->get('services.sql');
}

你会得到Error: Call to a member function get() on a non-object
原因是因为$this->container未设置导致,google找到一个解决思路 在你当前的Bundle的YourBundleNameBundle.php文件中写入以下代码

private static $containerInstance = null;

public function setContainer(ContainerInterface $container = null)
{
        parent::setContainer($container);
        self::$containerInstance = $container;
}

 public static function getContainer()
{
     return self::$containerInstance;
}

此时再Controller中使用

private $conn;
private $sql;
public function __construct($container)
{
    $this->conn = YourBundleNameBundle::getContainer()->get('database_connection');
    $this->sql = YourBundleNameBundle::getContainer()->get('services.sql');
}

就能正常get获取到对象了

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/21162.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Pota的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!