Skip to content

Instantly share code, notes, and snippets.

@everzet
Created May 12, 2010 09:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save everzet/398378 to your computer and use it in GitHub Desktop.
Save everzet/398378 to your computer and use it in GitHub Desktop.
Readability issues in ZF vs symfony 1 style guides
<?php
// ZF coding style guides
public function hydrate(ClassMetadata $metadata, $document, $data)
{
$values = array();
foreach ($metadata->fieldMappings as $mapping) {
if ( ! isset($data[$mapping['fieldName']])) {
continue;
}
if (isset($mapping['embedded'])) {
$embeddedMetadata = $this->_dm->getClassMetadata($mapping['targetDocument']);
$embeddedDocument = $embeddedMetadata->newInstance();
if ($mapping['type'] === 'many') {
$documents = new ArrayCollection();
foreach ($data[$mapping['fieldName']] as $docArray) {
$doc = clone $embeddedDocument;
$this->hydrate($embeddedMetadata, $doc, $docArray);
$documents->add($doc);
}
$metadata->setFieldValue($document, $mapping['fieldName'], $documents);
$value = $documents;
} else {
$value = clone $embeddedDocument;
$this->hydrate($embeddedMetadata, $value, $data[$mapping['fieldName']]);
$metadata->setFieldValue($document, $mapping['fieldName'], $value);
}
} elseif (isset($mapping['reference'])) {
$targetMetadata = $this->_dm->getClassMetadata($mapping['targetDocument']);
$targetDocument = $targetMetadata->newInstance();
$value = isset($data[$mapping['fieldName']]) ? $data[$mapping['fieldName']] : null;
if ($mapping['type'] === 'one' && isset($value['$id'])) {
$id = (string) $value['$id'];
$proxy = $this->_dm->getReference($mapping['targetDocument'], $id);
$metadata->setFieldValue($document, $mapping['fieldName'], $proxy);
} elseif ($mapping['type'] === 'many' && (is_array($value) || $value instanceof Collection)) {
$documents = new PersistentCollection($this->_dm, $targetMetadata, new ArrayCollection());
$documents->setInitialized(false);
foreach ($value as $v) {
$id = (string) $v['$id'];
$proxy = $this->_dm->getReference($mapping['targetDocument'], $id);
$documents->add($proxy);
}
$metadata->setFieldValue($document, $mapping['fieldName'], $documents);
}
} else {
$value = $data[$mapping['fieldName']];
$value = Types::getType($mapping['type'])->convertToPHPValue($value);
$metadata->setFieldValue($document, $mapping['fieldName'], $value);
}
if (isset($value)) {
$values[$mapping['fieldName']] = $value;
}
}
if (isset($data['_id'])) {
$metadata->setIdentifierValue($document, (string) $data['_id']);
}
return $values;
}
// symofny coding style guides:
public function hydrate(ClassMetadata $metadata, $document, $data)
{
$values = array();
foreach ($metadata->fieldMappings as $mapping)
{
if ( ! isset($data[$mapping['fieldName']]))
{
continue;
}
if (isset($mapping['embedded']))
{
$embeddedMetadata = $this->_dm->getClassMetadata($mapping['targetDocument']);
$embeddedDocument = $embeddedMetadata->newInstance();
if ($mapping['type'] === 'many')
{
$documents = new ArrayCollection();
foreach ($data[$mapping['fieldName']] as $docArray)
{
$doc = clone $embeddedDocument;
$this->hydrate($embeddedMetadata, $doc, $docArray);
$documents->add($doc);
}
$metadata->setFieldValue($document, $mapping['fieldName'], $documents);
$value = $documents;
}
else
{
$value = clone $embeddedDocument;
$this->hydrate($embeddedMetadata, $value, $data[$mapping['fieldName']]);
$metadata->setFieldValue($document, $mapping['fieldName'], $value);
}
}
elseif (isset($mapping['reference']))
{
$targetMetadata = $this->_dm->getClassMetadata($mapping['targetDocument']);
$targetDocument = $targetMetadata->newInstance();
$value = isset($data[$mapping['fieldName']]) ? $data[$mapping['fieldName']] : null;
if ($mapping['type'] === 'one' && isset($value['$id']))
{
$id = (string) $value['$id'];
$proxy = $this->_dm->getReference($mapping['targetDocument'], $id);
$metadata->setFieldValue($document, $mapping['fieldName'], $proxy);
}
elseif ($mapping['type'] === 'many' && (is_array($value) || $value instanceof Collection))
{
$documents = new PersistentCollection($this->_dm, $targetMetadata, new ArrayCollection());
$documents->setInitialized(false);
foreach ($value as $v)
{
$id = (string) $v['$id'];
$proxy = $this->_dm->getReference($mapping['targetDocument'], $id);
$documents->add($proxy);
}
$metadata->setFieldValue($document, $mapping['fieldName'], $documents);
}
}
else
{
$value = $data[$mapping['fieldName']];
$value = Types::getType($mapping['type'])->convertToPHPValue($value);
$metadata->setFieldValue($document, $mapping['fieldName'], $value);
}
if (isset($value))
{
$values[$mapping['fieldName']] = $value;
}
}
if (isset($data['_id']))
{
$metadata->setIdentifierValue($document, (string) $data['_id']);
}
return $values;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment