代码点火器,方法中的多个传递参数

问题描述:

我有一个代码点火器中的方法,并希望使用此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 
) 

如何解决这个问题,使价值可以投入的一切权利可变..

始终分配使用默认值参数如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

为什么你不试试$ 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

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

尝试用它来取代最后一行:

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>"; 
}