示例#1
0
 /**
  * リソースのリンクをつなげる
  *
  * リソースをリンクした結果を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;
 }
示例#2
0
 /**
  * リソースのデバック表示
  *
  * 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();
     }
 }