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 のやり方でやっていないのでしょうか? コントローラーでサービスマネージャーを取得し、テーブルゲートウェイをマッパーに渡す方法は知っていますが、それはコードの重複が多いようです。