代码点火器,方法中的多个传递参数
问题描述:
我有一个代码点火器中的方法,并希望使用此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>";
}
答
为什么你不试试$ this-> uri-> uri_to_assoc(n)。 见细节:http://ellislab.com/codeigniter/user-guide/libraries/uri.html 不需要使用_remap
答
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>";
}
当我要求我要的是 “kuesioner /测试/学校ID/6/PARENT_ID/7” 的测试方法是将打印$学校ID = 6,$ = PARENT_ID就是这样。 – 2013-05-14 03:58:46
我认为CI自动做这个没有任何额外的努力。我建议你初始化这些参数将帮助你防止出现警告和错误 – 2013-05-14 04:00:58
当我请求“kuesioner/test/parent_id/7”时,它应该只给测试函数中的var $ parent_id赋值7。 – 2013-05-14 04:01:22