2023-03-11 12:04:29 +03:00
< ? php
/**
* Zend Framework ( http :// framework . zend . com / )
*
* @ link http :// github . com / zendframework / zf2 for the canonical source repository
2023-04-01 09:03:34 +03:00
* @ copyright Copyright ( c ) 2005 - 2015 Zend Technologies USA Inc . ( http :// www . zend . com )
2023-03-11 12:04:29 +03:00
* @ license http :// framework . zend . com / license / new - bsd New BSD License
*/
namespace Zend\Db\TableGateway\Feature ;
use Zend\Db\ResultSet\ResultSet ;
use Zend\Db\RowGateway\RowGateway ;
use Zend\Db\RowGateway\RowGatewayInterface ;
use Zend\Db\TableGateway\Exception ;
class RowGatewayFeature extends AbstractFeature
{
/**
* @ var array
*/
protected $constructorArguments = array ();
/**
* @ param null $primaryKey
*/
public function __construct ()
{
$this -> constructorArguments = func_get_args ();
}
public function postInitialize ()
{
$args = $this -> constructorArguments ;
/** @var $resultSetPrototype ResultSet */
$resultSetPrototype = $this -> tableGateway -> resultSetPrototype ;
if ( ! $this -> tableGateway -> resultSetPrototype instanceof ResultSet ) {
throw new Exception\RuntimeException (
'This feature ' . __CLASS__ . ' expects the ResultSet to be an instance of Zend\Db\ResultSet\ResultSet'
);
}
if ( isset ( $args [ 0 ])) {
if ( is_string ( $args [ 0 ])) {
$primaryKey = $args [ 0 ];
2023-04-01 09:03:34 +03:00
$rowGatewayPrototype = new RowGateway ( $primaryKey , $this -> tableGateway -> table , $this -> tableGateway -> adapter );
2023-03-11 12:04:29 +03:00
$resultSetPrototype -> setArrayObjectPrototype ( $rowGatewayPrototype );
} elseif ( $args [ 0 ] instanceof RowGatewayInterface ) {
$rowGatewayPrototype = $args [ 0 ];
$resultSetPrototype -> setArrayObjectPrototype ( $rowGatewayPrototype );
}
} else {
// get from metadata feature
$metadata = $this -> tableGateway -> featureSet -> getFeatureByClassName ( 'Zend\Db\TableGateway\Feature\MetadataFeature' );
if ( $metadata === false || ! isset ( $metadata -> sharedData [ 'metadata' ])) {
throw new Exception\RuntimeException (
'No information was provided to the RowGatewayFeature and/or no MetadataFeature could be consulted to find the primary key necessary for RowGateway object creation.'
);
}
$primaryKey = $metadata -> sharedData [ 'metadata' ][ 'primaryKey' ];
2023-04-01 09:03:34 +03:00
$rowGatewayPrototype = new RowGateway ( $primaryKey , $this -> tableGateway -> table , $this -> tableGateway -> adapter );
2023-03-11 12:04:29 +03:00
$resultSetPrototype -> setArrayObjectPrototype ( $rowGatewayPrototype );
}
}
}