/** * リソースのリンクをつなげる * * リソースをリンクした結果をHEADER_LINK_BODYヘッダーに付加します * * @return array */ private function _chainLink(BEAR_Ro $rootRo, array $chain) { $config = $rootRo->getConfig(); $this->_chain = $chain; $hasMultiLink = $hasMultiLink2 = false; $class = get_class($rootRo); assert(method_exists($class, 'onLink')); // ルートリソース $firstUri = strtolower(str_replace(DIRECTORY_SEPARATOR, '_', $config['uri'])); $link = $body = $rootRo->getBody(); $isCollection = count($body) !== count($body, COUNT_RECURSIVE); if ($isCollection === true) { $sourceBody = $body; self::_makeCollectionChain($sourceBody, $firstUri, $rootRo); $linkFrom = $firstUri; $linked = array($firstUri => $sourceBody); $linked[$firstUri] = $sourceBody; $body = $sourceBody; $isCollectionRoot = true; } else { $body = $sourceBody = $body; $linked = array($firstUri => $sourceBody); $isCollectionRoot = false; } $ro = $rootRo; // foreach ($this->_chain as $links) { foreach ($links as $link) { if ($hasMultiLink2 === true || $isCollectionRoot) { self::_changeRecursive($linked, $linkFrom, $link); } else { $onLinks = $ro->onLink($sourceBody); $config = self::_makeRequestConfig($onLinks, $link); $linkRo = BEAR::factory('BEAR_Resource_Request', $config)->request(); $links = $linkRo->getLinks(); if (isset($links['pager'])) { $this->_links['pager'] = $links['pager']; } $body = $linkRo->getBody(); $isCollection = count($body) != count($body, COUNT_RECURSIVE); if ($isCollection) { self::_makeCollectionChain($body, $link, $linkRo); $hasMultiLink = true; $linkFrom = $link; } $linked[$link] = $body; } } $linkFrom = $link; $sourceBody = $body; $hasMultiLink2 = $hasMultiLink ? true : false; $ro = $linkRo; } $this->_cleanUpLink($linked); return $linked; }
/** * リソースのデバック表示 * * firePHPコンソールにリソースを表示します。 * * @param BEAR_Ro $ro リソースオブジェクト * * @return void */ public function debugShowResource(BEAR_Ro $ro) { $config = $ro->getConfig(); if (!isset($config['method'])) { return; } $labelUri = "[resource] {$config['method']} {$config['uri']}"; $labelUri .= $config['values'] ? '?' . http_build_query($config['values']) : ""; $body = $ro->getBody(); if (is_array($body) && isset($body[0]) && is_array($body[0])) { // bodyが表構造と仮定 $table = array(); $table[] = array_values(array_keys($body[0])); foreach ((array) $body as $key => $val) { $table[] = array_values((array) $val); } FB::table($labelUri, $table); } else { FB::group("{$labelUri}", array('Collapsed' => true)); FB::log($body); FB::groupEnd(); } }