コード例 #1
0
 /**
  * 分离isset结构中的类型
  * isset($id) ? $_GET['id'] : 2;
  * 转为:
  * 		array($_GET[id],2)
  * @param unknown $node
  */
 public function setItemByNode($node)
 {
     //处理三元表达式
     if ($node->getType() == "Expr_Ternary") {
         if ($node->if->getType() == "Expr_Ternary") {
             $this->setItemByNode($node->if);
         }
         if ($node->else->getType() == "Expr_Ternary") {
             $this->setItemByNode($node->else);
         }
         $if_node = SymbolUtils::getSymbolByNode($node->if);
         $else_node = SymbolUtils::getSymbolByNode($node->else);
         $if_node && $this->addSymbol($if_node);
         $else_node && $this->addSymbol($else_node);
     } else {
         return;
     }
 }
コード例 #2
0
 /**
  * Normalize the related records so they can be added into the response object
  *
  * @param unknown $baseRecord            
  * @param unknown $relatedRecords            
  * @param unknown $relation            
  * @return boolean
  */
 protected function normalizeRelatedRecords($baseRecord, $relatedRecords, $relation)
 {
     $refType = $relation->getType();
     $refModelNameSpace = $relation->getReferencedModel();
     // store a copy of all related record (PKIDs)
     // this must be attached w/ the parent records for joining purposes
     $relatedRecordIds = null;
     $refModel = new $refModelNameSpace();
     $primaryKeyName = $refModel->getPrimaryKeyName();
     // save the PKID for each record returned
     if (count($relatedRecords) > 0) {
         // 1 = hasOne 0 = belongsTo 2 = hasMany
         switch ($refType) {
             // process hasOne records as well
             case 1:
                 // do nothin w/ hasOne since these are auto merged into the main record
                 break;
             case 0:
                 // this doesn't seem right, why are they occasionally showing up inside an array?
                 if (isset($relatedRecords[$primaryKeyName])) {
                     $relatedRecordIds = $relatedRecords[$primaryKeyName];
                     // wrap in array so we can store multiple hasOnes from many different main records
                     $relatedRecords = array($relatedRecords);
                 } else {
                     $relatedRecordIds = $relatedRecords[0][$primaryKeyName];
                 }
                 break;
             default:
                 $relatedRecordIds = array();
                 foreach ($relatedRecords as $rec) {
                     $relatedRecordIds[] = $rec[$primaryKeyName];
                 }
                 break;
         }
     } else {
         $relatedRecordIds = null;
     }
     // we map table names to end point resource names and vice versa
     // regardless of relationship, the related records are returned as part of the end point resource name
     $this->updateRestResponse($relation->getTableName(), $relatedRecords);
     // add related record ids to the baseArray
     // this is how JSON API suggests that you related resources
     // will save nothing, a single value or an array
     // does this only run when working with hasMany?
     // belongsTo and hasOne are already in place, yes?
     if ($relatedRecordIds !== null) {
         if ($refType == 2 || $refType == 4) {
             $suffix = '_ids';
             // populate the linked property or merge in additional records
             // attempt to store the name similar to the table name
             $name = $relation->getTableName('singular');
             $this->baseRecord[$name . $suffix] = $relatedRecordIds;
         }
     }
     return true;
 }