2013-05-14 45 views
0

我有一個代碼點火器中的方法,並希望使用此URL「kuesioner/test/school_id/6/parent_id/7」 我使用_remap函數動態鏈接在URL中的順序。代碼從this。 這是我的代碼:代碼點火器,方法中的多個傳遞參數

public function test($school_id, $parent_id) 
{ 
    echo "<pre>"; 
    print_r($schoold_id); 
    print_r($parent_id); 
    echo "</pre>"; 
} 

public function _remap($method, $params) 
{ 
    $map = array(); 
    for($i = 1; $i < count($params); $i = $i + 2) 
    { 
     $map[$params[$i-1]] = $params[$i]; 
    } 

    if($method[0] != '_' && method_exists($this, $method)) 
     return $this->$method($map); 
} 

讓我的控制器上的錯誤說缺少論據2 Kuesioner ::測試()($ PARENT_ID丟失),其返回地圖的陣列爲單變量$學校ID在測試控制器。

的print_r($學校ID)恰好顯示

Array 
    (
    [school_id] => 6 
    [parent_id] => 7 
) 

如何解決這個問題,使價值可以投入的一切權利可變..

回答

1

始終分配使用默認值參數如0或其他任何它將防止不必要的警告和錯誤。

public function test($school_id = 0, $parent_id = 0) 
{ 
    echo "<pre>"; 
    print_r($schoold_id); 
    print_r($parent_id); 
    echo "</pre>"; 
} 
+0

當我要求我要的是 「kuesioner /測試/學校ID/6/PARENT_ID/7」 的測試方法是將打印$學校ID = 6,$ = PARENT_ID就是這樣。 – 2013-05-14 03:58:46

+0

我認爲CI自動做這個沒有任何額外的努力。我建議你初始化這些參數將幫助你防止出現警告和錯誤 – 2013-05-14 04:00:58

+0

當我請求「kuesioner/test/parent_id/7」時,它應該只給測試函數中的var $ parent_id賦值7。 – 2013-05-14 04:01:22

-1

爲什麼你不試試$ this-> uri-> uri_to_assoc(n)。 見細節:http://ellislab.com/codeigniter/user-guide/libraries/uri.html 不需要使用_remap

+0

您是否錯過了代碼?我嘗試過你的代碼,但它返回空白。測試方法沒有變化。 – 2013-05-14 04:23:27

+0

是的。我想要返回$ this - > $ method($ map);最後的功能 – JamesN 2013-05-14 04:47:03

+0

爲什麼你不試試$ this-> uri-> uri_to_assoc(n)。 http://ellislab.com/codeigniter/user-guide/libraries/uri.html。不需要使用_remap – JamesN 2013-05-14 04:47:38

0
public function test($params = NULL) 
{ 
    print_r($this->uri->uri_to_assoc(3)); 
    // #CHECK http://ellislab.com/codeigniter/user-guide/libraries/uri.html 
} 
+0

是的,我很感謝你的解決,但我想嚴格關注我的問題。還想知道如何在測試方法中將正確的目的值返回給每個參數。 – 2013-05-14 07:50:02

0

嘗試用它來取代最後一行:

return call_user_func_array(array($this, $method), $map); 

我認爲這將解決您的問題,但如果沒有,你可以編輯你的 「測試」 功能:

public function test($params) 
{ 
    echo "<pre>"; 
    print_r($params['schoold_id']); 
    print_r($params['parent_id']); 
    echo "</pre>"; 
}