使URI段参数可选

时间:2014-06-26 18:31:08

标签: php codeigniter uri

我正在CodeIgniter中开发一个具有文章数据库的应用程序。我希望能够按类型(文章,意见,评论,媒体)过滤文章,然后按日期,观点或评论数量进行排序。我通过URI获取这些参数。我希望能够动态地将这些URI转换为脚本的变量,以便可以使用任何parms组合,但不止一种类型或多种类型。例如,一个URI可能包含一个类型,但没有排序......或者它可能包含一个排序但没有类型...或者它可以包含两个或没有。这就是我的URI现在的样子:

articles/type:media/sort:date-desc
articles/sort:comments-asc
articles/sort:views-desc
... etc.

这是我目前的剧本:

$uri = 'type:media/sort:views-desc';
$uri = explode('/', $uri);

$allowed_types = array('article', 'review', 'opinion', 'media');
        $allowed_sorts = array('date-asc', 'date-desc', 'views-asc', 'views-desc', 'comments-asc', 'comments-desc');        

        if(count($uri) > 0){

            for($i=0;$i<=count($args);$i++){

                $argument = explode(':', $args[$i]);

                if($argument[0] == 'type'){

                    if(in_array($argument[$i], $allowed_types)){

                        $type = $argument[1];

                    }

                } else if($argument[0] == 'sort'){

                    if(in_array($argument[$i], $allowed_sorts)){

                        $sort_by = explode('-', $argument[1]);
                        $sort_by_what = $sort_by[0];
                        $sort_by_how = $sort_by[1];

                    }

                }

            }

        }

        show_error('Type: '.$type.'... Sort By: '.$sort_by_what.'-'.$sort_by_how); 

我目前收到一些错误,说三个参数vars $ type,$ sort_by_what,$ sort_by_how没有定义,还有未定义的偏移量:1。关于如何解决这个问题的想法?

1 个答案:

答案 0 :(得分:0)

您正在使用范围之外的变量。如果要在范围中使用它们,请确保在那里声明它们。

尝试添加:

$sort_by = "" ;
$sort_by_what = "" ;
$sort_by_how = "" ;

在if条款之外。

我还建议您检查爆炸调用返回的数组的大小,以确保它不为空。我认为这会导致越界错误(未定义的偏移量:1)

因此,代码应如下所示:

    $uri = 'type:media/sort:views-desc';
$uri = explode('/', $uri);

$sort_by = "";
$sort_by_what = "";
$sort_by_how = "";
$allowed_types = array('article', 'review', 'opinion', 'media');
$allowed_sorts = array('date-asc', 'date-desc', 'views-asc', 'views-desc', 'comments-asc', 'comments-desc');

if (count($args) > 0) {

  for ($i = 0; $i <= count($args); $i++) {

    $argument = explode(':', $args[$i]);
    if (count($argument) > 0) {


      if ($argument[0] == 'type') {

        if (in_array($argument[$i], $allowed_types)) {

          $type = $argument[1];
        }
      } else if ($argument[0] == 'sort') {
        if (in_array($argument[$i], $allowed_sorts)) {

          $sort_by = explode('-', $argument[1]);
          if (count($sort_by) > 0) {
            $sort_by_what = $sort_by[0];
            $sort_by_how = $sort_by[1];
          } else {
            show_error("Can't parse sorting parameters!");
          }
        }
      }
    }
  }
  show_error('Type: ' . $type . '... Sort By: ' . $sort_by_what . '-' . $sort_by_how);
} 

我不知道这是代码片段还是整个代码,但变量$args来自何处?

相关问题