public function getIndexItems($resource, Metadata $metadata, $properties = null) { $indexItems = []; $accessor = PropertyAccess::createPropertyAccessor(); //walk over each field of the property that should get indexed foreach ($metadata->getProperties() as $propertyNode) { //get the right indexType $type = $this->collector->getType($propertyNode->getType()); //get the IndexItems of the right IndexType $newIndexItems = $type->index($accessor->getValue($resource, $propertyNode->getProperty()), $propertyNode->getOptions(), $properties); if ($newIndexItems) { foreach ($newIndexItems as $indexItem) { //set fieldname if ((empty($properties) || in_array('fieldName', $properties)) && $indexItem->getFieldName() == null) { $indexItem->setFieldName($metadata->getHumanizedBundleName() . '_' . strtolower($metadata->getEntityName() . '_' . strtolower($propertyNode->getProperty()))); } $indexItems[] = $indexItem; } } } return $indexItems; }
public function testSetAndGetBundleName() { $metadata = new Metadata(); $metadata->setBundleName('BundleName'); $this->assertEquals('BundleName', $metadata->getBundleName()); }
public function create($resource) { $className = null; if (is_string($resource)) { $className = $resource; } else { $className = $this->getClassName($resource); // ...Entity/Article } $configuration = $this->getConfiguration($className); // array(properties => array(title, teaser, ...)) if ($configuration === null) { return null; } $metadata = new Metadata(); $metadata->setBundleName($this->getBundleName($className)); $metadata->setHumanizedBundleName($this->getHumanizedBundleName($className)); $metadata->setClassName($className); $metadata->setEntityName($this->getEntityName($resource)); if ($configuration['properties']) { $properties = []; foreach ($configuration['properties'] as $property => $config) { if (is_array($config[0])) { foreach ($config[0] as $type => $options) { $propertyNode = new PropertyNode(); $propertyNode->setType($type); // type: Plain $propertyNode->setOptions($options); // weight, type $propertyNode->setProperty($property); //property: title $properties[] = $propertyNode; } } else { $propertyNode = new PropertyNode(); $propertyNode->setType($config[0]); $propertyNode->setOptions(null); $propertyNode->setProperty($property); $properties[] = $propertyNode; } } $metadata->setProperties($properties); } return $metadata; }