/** * Serializes a pagination into an array. * @param PaginationProvider $pagination * @return array the array representation of the pagination * @see addPaginationHeaders() */ protected function serializePagination(PaginationProvider $pagination) { return ['_links' => Link::serialize($pagination->getLinks(true)), '_meta' => ['totalCount' => $pagination->totalCount, 'pageCount' => $pagination->pageCount, 'currentPage' => $pagination->getPage(), 'perPage' => $pagination->limit]]; }
/** * Converts the model into an array. * * This method will first identify which fields to be included in the resulting array by calling {@see \rock\components\ArrayableTrait::resolveFields()}. * It will then turn the model into an array with these fields. If `$recursive` is true, * any embedded objects will also be converted into arrays. * * If the model implements the [[Linkable]] interface, the resulting array will also have a `_link` element * which refers to a list of links as specified by the interface. * * @param array $only the fields being requested. If empty, all fields as specified * by {@see \rock\components\ArrayableTrait::fields()} will be returned. * @param array $exclude * @param array $expand the additional fields being requested for exporting. Only fields declared * in {@see \rock\components\ArrayableTrait::extraFields()} will be considered. * @param boolean $recursive whether to recursively return array representation of embedded objects. * @return array the array representation of the object */ public function toArray(array $only = [], array $exclude = [], array $expand = [], $recursive = true) { $data = []; foreach ($this->resolveFields($only, $exclude, $expand) as $field => $definition) { $data[$field] = is_string($definition) ? $this->{$definition} : call_user_func($definition, $field, $this); } if ($this instanceof Linkable) { $data['_links'] = Link::serialize($this->getLinks()); } return $recursive ? static::convert($data) : $data; }