覆盖Symfony2中的实体管理器
更新以反映讨论情况 我想实现一些自定义逻辑来选择正确的实体管理器。我认为这就像重写doctor.class参数、扩展doctor\Bundle\DoctrineBundle\Registry和重写getManager()方法一样简单。但是,当我这样做时,我会得到以下错误:覆盖Symfony2中的实体管理器,symfony,Symfony,更新以反映讨论情况 我想实现一些自定义逻辑来选择正确的实体管理器。我认为这就像重写doctor.class参数、扩展doctor\Bundle\DoctrineBundle\Registry和重写getManager()方法一样简单。但是,当我这样做时,我会得到以下错误: ErrorException: Warning: strtolower() expects parameter 1 to be string, object given in /Applications/MAMP/htdocs
ErrorException: Warning: strtolower() expects parameter 1 to be string, object given in /Applications/MAMP/htdocs/nmevent/app/bootstrap.php.cache line 119
代码如下:
<?php
namespace NM\Bundle\MultiTenantBundle\Doctrine;
use Doctrine\Bundle\DoctrineBundle\Registry;
class TenantRegistry extends Registry
{
/**
* {@inheritdoc}
*
* @throws \InvalidArgumentException
*/
public function getManager($name = null)
{
if (null === $name) {
$name = $this->defaultManager;
}
$managers = $this->getManagers();
if (!isset($managers[$name])) {
throw new \InvalidArgumentException(sprintf('Doctrine %s Manager named "%s" does not exist.', $this->getName(), $name));
}
return $this->getService($managers[$name]);
}
}
您试图获取租户注册类在第21行上不存在的属性名称:
here
throw new \InvalidArgumentException(sprintf( ↓
'Doctrine %s Manager named "%s" does not exist.', $this->name, $name));
UPD:
here
throw new \InvalidArgumentException(sprintf( ↓
'Doctrine %s Manager named "%s" does not exist.', $this->name, $name));
属性name
在AbstractManagerRegistry
类中定义,并且具有私有访问权限。因此,您无法直接获取此属性。请改用getName()
方法。您试图在21行上获取TenantRegistry
类的不存在属性name
:
here
throw new \InvalidArgumentException(sprintf( ↓
'Doctrine %s Manager named "%s" does not exist.', $this->name, $name));
UPD:
here
throw new \InvalidArgumentException(sprintf( ↓
'Doctrine %s Manager named "%s" does not exist.', $this->name, $name));
属性name
在AbstractManagerRegistry
类中定义,并且具有私有访问权限。因此,您无法直接获取此属性。改用getName()
方法。抛出异常时,$this->name
中有什么内容?正如错误所说,它是未定义的,意味着它不存在。当我尝试转储$this->managers时,它也是如此。使它看起来好像有些东西没有正确初始化,但我一辈子都不知道为什么。当你抛出异常时,$this->name
中有什么内容?正如错误所说,它是未定义的,意味着它不存在。当我尝试转储$this->managers时,它也是如此。使它看起来好像有些东西没有正确初始化,但我一辈子都不知道为什么。我明白了。我不明白为什么它不存在,因为我覆盖的方法与原始方法完全相同。使用getName()可以引发异常。然而,这意味着$this->managers也不存在。当我使用getManagers()临时存储管理器并将temp变量传递给getService时,我会在哪个类/方法中引发异常“ErrorException:Warning:strtolower()期望参数1为字符串,对象在/Applications/MAMP/htdocs/nEvent/app/bootstrap.php.cache line 119中给出”?另外,用编辑过的数据更新你的问题。没关系-我现在看到getManagers()方法没有返回我想要的。当用getManagerNames()替换它时,它似乎可以工作。我明白了。我不明白为什么它不存在,因为我覆盖的方法与原始方法完全相同。使用getName()可以引发异常。然而,这意味着$this->managers也不存在。当我使用getManagers()临时存储管理器并将temp变量传递给getService时,我会在哪个类/方法中引发异常“ErrorException:Warning:strtolower()期望参数1为字符串,对象在/Applications/MAMP/htdocs/nEvent/app/bootstrap.php.cache line 119中给出”?另外,用编辑过的数据更新你的问题。没关系-我现在看到getManagers()方法没有返回我想要的。当用getManagerNames()替换它时,它似乎可以工作。