在 Zend Framework 1 中,我有几个映射器,它们从父 Mapper 类继承了 setDbTable 和 getDbTable。
现在在 ZF2 中,我面临一个问题,即我需要模型中的服务管理器,但我不知道如何获得它:
class Mapper
{
protected $tableGateway;
protected $module = 'application';
public function setTableGateway($table)
{
if (is_string($table)) {
$class = $this->module . '\Model\DbTable\\' . ucfirst($table);
$sm = $this->getServiceLocator(); <= Fatal error: Call to undefined method Mapper::getServiceLocator()
$tableGateway = (class_exists($class)) ? $sm->get($class) : $sm->get(new TableGateway($table));
} else {
$tableGateway = $table;
}
if (!$tableGateway instanceof Zend\Db\TableGateway\AbstractTableGateway) {
throw new \Exception('Invalid table data gateway provided');
}
$this->tableGateway = $tableGateway;
return $this;
}
// more code
该行:
$sm = $this->getServiceLocator();
给出一个致命错误:
Call to undefined method Application\Model\Mapper\Doc::getServiceLocator()
如何在我的模型中获取服务管理器?还是我不是按照 ZF2 的方式做事?我知道如何在我的控制器中获取服务管理器并将 tableGateway 传递给映射器,但这对我来说似乎有很多重复的代码。