/** * @param string $propertyName * @param Collection $annotations */ private function setPropertyService($propertyName, Collection $annotations) { if ($annotations->has(Service::PROPERTY_ANNOTATION)) { $annProperty = $annotations->get(Service::PROPERTY_ANNOTATION); if (!is_null($serviceName)) { $this->{$propertyName} = $this->getDI()->get($serviceName); } else { Logger::getInstance()->warning("Annotation Inject in Controller required attribute service"); } } }
/** * @param Collection|Collection[] $items * @param string $source * * @return array */ protected function processAnnotations($items, $source) { $fields = []; if (empty($items)) { return $fields; } if ($items instanceof Collection) { $annotations = $items->getAll($this->_group); foreach ($annotations as $annotation) { $arguments = $annotation->getArguments(); $fields[] = $this->buildField($arguments, $source); } } else { foreach ($items as $column => $annotations) { if (!$annotations->has($this->_group)) { continue; } $arguments = array_merge_recursive($annotations->has('Field') ? $annotations->get('Field')->getArguments() : [], $annotations->get($this->_group)->getArguments() ?: []); $fields[] = $this->buildField($arguments, $source, $column); } } return $fields; }
protected function createElementByProperty($elementName, Property $baseProperty, Property $mergeProperty = null) { $elementType = 'Phalcon\\Forms\\Element\\Text'; if (!$baseProperty && !$mergeProperty) { return new $elementType($elementName); } $property = $mergeProperty && $mergeProperty->has('Type') ? $mergeProperty : $baseProperty; if ($property->has('Type')) { $typeArguments = $property->get('Type')->getArguments(); $alias = isset($typeArguments[0]) ? strtolower($typeArguments[0]) : null; $elementType = isset($this->elementAlias[$alias]) ? $this->elementAlias[$alias] : $elementType; } $property = $mergeProperty && $mergeProperty->has('Name') ? $mergeProperty : $baseProperty; if ($property->has('Name')) { $arguments = $property->get('Name')->getArguments(); $elementName = isset($arguments[0]) ? $arguments[0] : $elementName; } $element = new $elementType($elementName); $property = $mergeProperty && $mergeProperty->has('Attr') ? $mergeProperty : $baseProperty; if ($property->has('Attr')) { $element->setAttributes($property->get('Attr')->getArguments()); } $addValidator = function ($property, $element, $validatorAlias) { foreach ($property as $annotation) { if ($annotation->getName() != 'Validator') { continue; } $arguments = $annotation->getArguments(); if (!isset($arguments[0])) { continue; } $validatorName = strtolower($arguments[0]); if (!isset($validatorAlias[$validatorName])) { continue; } $validator = $validatorAlias[$validatorName]; $element->addValidator(new $validator($arguments)); } return $element; }; if ($baseProperty->has('Validator')) { $element = $addValidator($baseProperty, $element, $this->validatorAlias); } if ($mergeProperty && $mergeProperty->has('Validator')) { $element = $addValidator($mergeProperty, $element, $this->validatorAlias); } $addFilter = function ($property, $element) { foreach ($property as $annotation) { if ($annotation->getName() != 'Filter') { continue; } $arguments = $annotation->getArguments(); if (!isset($arguments[0])) { continue; } $filterName = strtolower($arguments[0]); $element->addFilter($filterName); } return $element; }; if ($baseProperty->has('Filter')) { $element = $addFilter($baseProperty, $element); } if ($mergeProperty && $mergeProperty->has('Filter')) { $element = $addFilter($mergeProperty, $element); } $property = $mergeProperty && $mergeProperty->has('Options') ? $mergeProperty : $baseProperty; if ($property->has('Options')) { $element->setAttributes($property->get('Options')->getArguments()); } $addOption = function ($property, $element) { $options = array(); foreach ($property as $annotation) { if ($annotation->getName() != 'Option') { continue; } $options += $annotation->getArguments(); } $element->setOptions($options); return $element; }; if ($baseProperty->has('Option')) { $element = $addOption($baseProperty, $element); } if ($mergeProperty && $mergeProperty->has('Option')) { $element = $addOption($mergeProperty, $element); } return $element; }
/** * Get column info. * * @param array $arguments Annotations arguments. * @param Collection $collection Annotations collection. * * @return array */ protected function _getModelColumnData($arguments, $collection) { $columnData = []; /** * Get type. */ if (isset($arguments['type'])) { switch ($arguments['type']) { case 'integer': $columnData['type'] = Column::TYPE_INTEGER; $columnData['isNumeric'] = true; break; case 'string': $columnData['type'] = Column::TYPE_VARCHAR; break; case 'text': $columnData['type'] = Column::TYPE_TEXT; break; case 'boolean': $columnData['type'] = Column::TYPE_BOOLEAN; break; case 'date': $columnData['type'] = Column::TYPE_DATE; break; case 'datetime': $columnData['type'] = Column::TYPE_DATETIME; break; } } /** * Get size. */ if (isset($arguments['size'])) { $columnData['size'] = $arguments['size']; } /** * Check for the 'nullable' parameter in the 'Column' annotation. */ if (isset($arguments['nullable'])) { $columnData['notNull'] = !$arguments['nullable']; } /** * Check if the attribute is marked as identity. */ if ($collection->has('Identity')) { $columnData['first'] = true; if (isset($columnData['isNumeric']) && $columnData['isNumeric'] == true) { $columnData['autoIncrement'] = true; } } return $columnData; }
/** * @param string $attribute * @param mixed $value * @param Annotations $annotations * @param Transform|null $transform * @return mixed * @throws MustBeSimpleException * @throws MustBeSequenceException * @throws MustBeObjectException */ protected function buildValueToMap($attribute, $value, Annotations $annotations, Transform $transform = null) { $valueToMap = $value; if ($annotations->has('mapper')) { /** @var Annotation $annotation */ $annotation = $annotations->get('mapper'); $annotationClass = $annotation->getArgument('class'); $annotationIsArray = $annotation->getArgument('isArray'); $transforms = $transform ? $transform->getTransforms() : null; $skipAttributes = $this->getSkipAttributesByParent($attribute); if ($this->isObject($value)) { if ($annotationIsArray) { if ($this->hasValidation()) { throw new MustBeSequenceException($attribute, $this->getOutputClass()); } else { $valueToMap = null; } } else { /** @var object|array $value */ /** @var Mapper $mapper */ $mapper = new static($value, $annotationClass); $valueToMap = $mapper->setTransforms($transforms)->setValidation($this->hasValidation())->setSkipAttributes($skipAttributes)->map(); } } else { if ($annotationIsArray) { $validation = $this->hasValidation(); $valueToMap = array_map(function ($value) use($annotationClass, $transforms, $validation, $skipAttributes) { /** @var object|array $value */ /** @var Mapper $mapper */ $mapper = new static($value, $annotationClass); return $mapper->setTransforms($transforms)->setValidation($validation)->setSkipAttributes($skipAttributes)->map(); }, $value); } elseif ($this->hasValidation()) { throw new MustBeObjectException($attribute, $this->getOutputClass()); } else { $valueToMap = null; } } } elseif ($this->isStructure($value)) { if ($this->hasValidation()) { throw new MustBeSimpleException($attribute, $this->getOutputClass()); } else { $valueToMap = null; } } return $valueToMap; }
protected function isInjector(Collection $property) { return $property->has('var') && $property->has('inject'); }