В главе «Database and models» тока (2,1) ZF2 Руководство пользователя там фрагмент кода, я не понимаю:AlbumTableGateway в Zend Framework Руководство пользователя 2
(блок «Использование ServiceManager для настройки шлюза таблицы и ввести в AlbumTable ")
...
class Module
{
// getAutoloaderConfig() and getConfig() methods here
// Add this method:
public function getServiceConfig()
{
return array(
'factories' => array(
'Album\Model\AlbumTable' => function($sm) {
$tableGateway = $sm->get('AlbumTableGateway');
$table = new AlbumTable($tableGateway);
return $table;
},
'AlbumTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Album());
return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
},
),
);
}
}
переменная $sm
будет позже экземпляр Zend\ServiceManager\ServiceManager
, верно? Метод Zend \ ServiceManager \ ServiceManager # get (...) ожидает имя класса как первый аргумент. Но нет класса AlbumTableGateway. Есть только два класса моделей: Альбом \ Модель \ Альбом и Альбом \ Модель \ АльбомТаблица.
Это ошибка руководства или я неправильно понимаю код?
Благодаря
О, я вижу сейчас ... Нет класса 'AlbumTableGateway', так как вызовы' AlbumTableGateway' завершаются в AlbumTableGateway-Factory, что накладывает соответствующие объекты на лету. ОК, разрешено. :) – automatix
Точно, '$ sm-> get ('alias')' требует экземпляр класса, который будет возвращен из SM указанным псевдонимом. – Sam