2009/9/11 Tom Graham <[email protected]>:
> What about an aggregate metadata factory implementation, so you could pass
> it multiple metadata factory instances of varying types.
>
Reading the docs "There is currently a factory which does this, but it
will probably be heavily rewritten, so this manual way has to
suffice.", so it will change anyway :)
> For example...
>
> class Zend_Entity_MetadataFactory_Aggregate implements
> Zend_Entity_MetadataFactory_Interface
> {
> protected $_metadataFactories = array();
> protected $_maps;
> protected $_entityNames;
>
> public function __construct(array $metadataFactories)
> {
> $this->_metadataFactories = $metadataFactories;
> }
>
> protected function _loadDefinitions()
> {
> if ($this->_maps === null) {
> $this->_maps = array();
> $this->_entityNames = array();
> foreach ($this->_metadataFactories as $metadataFactory) {
> $this->_maps =
> array_merge($metadataFactory->getDefinitionEntityNames(), $this->_maps);
> }
>
> $this->_entityNames = array_keys($this->_maps);
> }
> }
>
> /**
> * Retrieve an array of all definitions by name.
> *
> * @return array
> */
> public function getDefinitionEntityNames()
> {
> $this->_loadDefinitions();
> return $this->_entityNames;
> }
>
> /**
> * Get an Entity Mapper Definition by the name of the Entity
> *
> * @param string $entityName
> * @throws Zend_Entity_InvalidEntityException
> * @return Zend_Entity_Definition_Entity
> */
> public function getDefinitionByEntityName($entityName)
> {
> $this->_loadDefinitions();
> if(!isset($this->_maps[$entityName])) {
> throw new Zend_Entity_InvalidEntityException("The entity
> '".$entityName."' is unknown.");
> }
> return $this->_maps[$entityName];
> }
>
> /**
> *
> * @param string $visitorClass
> * @return Zend_Entity_Definition_MappingVisitor[]
> */
> public function transform($visitorClass)
> {
> // ...
> }
> }
>
> 2009/9/11 keith Pope <[email protected]>
>>
>> 2009/9/11 keith Pope <[email protected]>:
>> > Hi,
>> >
>> > I am just having a look at Zend_Entity, I was wondering how it handles
>> > object/entity instantiation, having a look through the code the
>> > Zend_Db_Mapper_Loader_LoaderAbstract has a createEntity() method which
>> > instantiates the entity. Is it planned that we will be able to
>> > override this and provide custom instantiation code/loaders for the
>> > entity manager? I am coming from the angle that it would be nice to be
>> > able to inject a DI container into the manager, maybe I am thinking
>> > about it wrong?
>> >
>> > Other than that the docs were really good and I was able to get
>> > everything working very quickly, good work :)
>> >
>> > Thx
>> >
>> > Keith
>> >
>>
>> Another bit of feedback....
>>
>> When creating the Mappings from the metadata it would be nice if you
>> could specifiy either multiple paths or add more than one
>> Zend_Entity_MetadataFactory_Code to the create method. This way we can
>> have module specific metadata and load it via a boostrap class
>> resource.
>
>
--
----------------------------------------------------------------------
[MuTe]
----------------------------------------------------------------------