2013-11-21 26 views
2

我試圖給get_lists方法添加一個新的變量(參數)`$ sugg_only = false'。現在,我將根據用戶是否具有登錄令牌來提取所有數據。這工作正常,並返回自定義列表中的數據數組。我的PHP類中的其他參數

如果建議列設置爲Y,我想要做的就是從shopping_list_name中返回東西。這樣,如果他們沒有自定義列表,它會提取我們提供的建議列表。

這裏是一個什麼樣的表中的完整列表:

ID SHOPPING_LIST_NAME         S SEQUENCE 

1 test amnaik shopping list       N 
    2 bonner shopping list        N 
    3 793d7384fa4fa247d6fae07db104147d0a2dad6e   Y 
    4 kj's shopping list         N 
    5 kj's shopping list from 1384201636     N 
    6 kj's shopping list from 1384201659     N 
    7 kj's shopping list from 1384202055     N 
    8 kj's shopping list from 1384202089     N 
    9 kj's shopping list from 1385064064     N 
10 kj's shopping list from 1385064145     N 
11 kj's shopping list from 1385064150     N 
12 kj's shopping list from 1385064257     N 
13 kj's shopping list from 1385064825     N 
14 kj's shopping list from 1385064857     N 

所以,你看,這裏有一個(可怕的名字命名)的購物列表的設置作爲一個建議。

// Get a user's shopping lists 
    public function get_lists($clobber = false, $sugg_only = false) { 
     if ($this->UserShoppingList != null && !$clobber) { 
      return $this->UserShoppingList; 

    } else if ($this->get_sign_in_token()) { 
     global $db; 

     $vars = array(); 
     $vars[] = array(':i_sign_in_token', strtoupper($this->get_sign_in_token())); 

     $rows = $db->get_function_ref_cursor('custom.japi_shopping_list.get_lists_for_shopper(:i_sign_in_token)', $vars); 

     // Turn the rows into objects and get their items. 
     foreach ($rows as $row) { 
      $list = new UserShoppingList(null, $this->sign_in_token); 
      $list->get_from_array($row); 
      $list->get_items(); 
      $this->UserShoppingList[] = $list; 
     } 

     return $this->UserShoppingList; 
    } else { 
     return false; 
    } 
} 

API頁面:

if(!isset($_GET['token']) && !isset($_GET['suggested_only'])) { 
     die('Must pass-in either a \'token\' or \'suggested_only\' flag'); 
    } 

    if(isset($_GET['token'])) { 
     $shopper = new Shopper($_GET['token']) 
     or die('Could not instantiate a new Shopper from the \'token\' passed-in'); 

     $array = array(); 
     $shopper_lists = $shopper->get_lists(true); 
     foreach ($shopper_lists as $list) { 
      $array[] = $list->json(); 
     } 

      echo json_encode($array);   
//  echo json_encode($shopper_lists); 
    } 

我將有可能被寫入另一個foreach環路和公正包括無論發生什麼事,如果$ sugg_only等於TRUE?

像這樣的東西添加到我的API頁面??的底部:

if(isset($_GET['suggested_only']) && $_GET['suggested_only'] == 'true') 
    { 


    } 

任何幫助將不勝感激。謝謝。

回答

0

當陣列處理,我通常會傾向於array_key_exists( 'suggested_only',$ _ GET)在isset($ _ GET [ 'suggested_only'])

如果沒有什麼與數據的執行確實不同,只是您選擇的數據有所不同,我會將您的聲明放在API頁面的頂部,而不是底部。

這樣一來,你的IF語句可以定義爲,當你不可避免地調用$ shopper-> get_lists()

標誌你可以做這樣的事情:

$suggestions = false; 
$clobber = false; 
if(isset($_GET['suggested_only']) && $_GET['suggested_only'] == 'true') 
{ 
    $suggestions = true; 

} 

... 

$shopper_lists = $shopper->get_lists($clobber, $suggestions); 

這樣一來,你不」真的重複獲取你想要的數據的代碼。

無論其

當它發生的時候,如果你添加什麼了一系列類型的列表來獲得。你不想爲你的get_lists函數添加一個標誌和另一個變量。它會變得一團糟。

這將是最好能有像$ _GET [「型」]單個變量,並切換如下:

switch($_GET['type']) 
{ 
    case 'thingo': 
     $shopper->get_lists('thingo'); 
     //Or you could use $shopper->get_thingo_list(); 
     break; 
    case 'suggestion': 
     $shopper->get_lists('suggestion'); 
     //Or you could use $shopper->get_suggestion_list(); 
     break; 
    case 'list': 
     $shopper->get_lists('list'); 
     //Or you could use $shopper->get_list(); 
     break; 
    default: 
     //No type exists here 
    break; 
} 

有些人可能會建議以$ _GET變量直只是傳遞給你的函數,但出於安全考慮,我總是會有點緊張。