【问题标题】:Code Igniter, multiple passing parameters in methodCodeigniter,方法中的多个传递参数
【发布时间】:2013-05-14 03:41:18
【问题描述】:

我在 Code Igniter 中有一个方法,并希望使用此 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);
}

在我的控制器上出现错误,提示 Kuesioner::test() 缺少参数 2(缺少 $parent_id),它将映射数组返回到测试控制器中的单个变量 $school_id。

print_r($school_id) 准确显示

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

如何解决这个问题,以便可以将值放入每个正确的变量中..

【问题讨论】:

    标签: codeigniter function url-parameters


    【解决方案1】:

    始终为参数分配默认值,例如 0 或其他任何可以防止不必要的警告和错误的值。

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

    【讨论】:

    • 我想要的是,当我在测试方法中请求“kuesioner/test/school_id/6/parent_id/7”时,它会打印 $school_id = 6 和 $parent_id = 7。就是这样。
    • 我认为 CI 会自动执行此操作而无需任何额外努力。我建议你初始化这些参数将帮助你防止警告和错误
    • 当我请求“kuesioner/test/parent_id/7”时,它应该只给 var $parent_id 在测试函数中的值 7。
    • 但是现在发生在测试方法中,它只返回 $school_id 的单个变量,它的值是 Array ( [school_id] => 6 [parent_id] => 7 ) $parent_id 现在总是 0。
    【解决方案2】:
    public function test($params = NULL)
    {
        print_r($this->uri->uri_to_assoc(3));
        // #CHECK http://ellislab.com/codeigniter/user-guide/libraries/uri.html
    }
    

    【讨论】:

    • 是的,感谢您的解决,但我想严格关注我的问题。仍然想知道如何正确地为测试方法中的每个参数返回值 $map。
    【解决方案3】:

    尝试用这个替换最后一行:

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

    【讨论】:

      【解决方案4】:

      为什么不尝试使用 $this->uri->uri_to_assoc(n)。 查看详情:http://ellislab.com/codeigniter/user-guide/libraries/uri.html 不需要使用_remap

      【讨论】:

      • 您最后遗漏了代码吗?我试过你的代码,但它返回空白。测试方法没有变量。
      • 是的。我想念 return $this->$method($map);函数的最后
      • 为什么不尝试使用 $this->uri->uri_to_assoc(n)。 ellislab.com/codeigniter/user-guide/libraries/uri.html 。不需要使用_remap
      • 请根据您的建议编辑此答案以使用 $this->uir->uri_to_assoc(n)。您不想让答案误导其他用户。
      猜你喜欢
      • 2013-05-07
      • 2012-11-27
      • 2023-04-05
      • 1970-01-01
      • 2011-04-20
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多