1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <?php
namespace Application\Factory;
use Zend\ServiceManager\AbstractFactoryInterface,
Zend\ServiceManager\ServiceLocatorInterface,
Zend\Db\TableGateway\TableGateway,
Zend\Db\ResultSet\ResultSet;
class TableGatewayFactory implements AbstractFactoryInterface
{
const TABLE_PREFIX = 'my_';
const TABLE_GATEWAY_SUFFIX = 'tablegateway';
public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
{
return strpos($name, self::TABLE_GATEWAY_SUFFIX) !== false;
}
public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
{
$tableName = $this->getTableNameFromServiceName($name);
$modelClassName = $this->getModelClassNameFromTableName($tableName);
$prefixedTableName = self::TABLE_PREFIX . $tableName;
return $this->createTableGateway($serviceLocator, $prefixedTableName, $modelClassName);
}
protected function getTableNameFromServiceName($serviceName)
{
$suffixPos = strpos($serviceName, self::TABLE_GATEWAY_SUFFIX);
$tableName = substr($serviceName, 0, $suffixPos);
return $tableName;
}
protected function getModelClassNameFromTableName($tableName)
{
$modelClassName = ucfirst($tableName) . 'Model';
return $modelClassName;
}
protected function createTableGateway(ServiceLocatorInterface $serviceLocator, $tableName, $modelClassName)
{
$dbAdapter = $serviceLocator->get('Zend\Db\Adapter\Adapter');
$model = $serviceLocator->get($modelClassName);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype($model);
return new TableGateway($tableName, $dbAdapter, null, $resultSetPrototype);
}
} |
Partager