1

議論を反映するために更新

正しいエンティティ マネージャーを選択するためのカスタム ロジックを実装したいと考えています。これは、doctrine.class パラメーターをオーバーライドし、Doctrine\Bundle\DoctrineBundle\Registry を拡張して getManager() メソッドをオーバーライドするのと同じくらい簡単だと思いました。ただし、実行すると、次のエラーが表示されます。

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]);
    }
}

ここで何が欠けていますか?

4

1 に答える 1

1

21name行目でTenantRegistryクラスの存在しないプロパティを取得しようとしています:

                                                           here
throw new \InvalidArgumentException(sprintf(                 ↓
    'Doctrine %s Manager named "%s" does not exist.', $this->name, $name));

更新日:

プロパティnameAbstractManagerRegistryクラスで定義され、プライベート アクセスがあります。したがって、このプロパティを直接取得することはできません。getName()代わりにメソッドを使用してください。

于 2013-04-04T05:42:46.797 に答える