0

我正在尝试根据数据库结果动态加载页面,但是我不知道如何将其实现到 codeigniter 中。

我有一个控制器:

function history()
{
//here is code that gets all rows in database where uid = myid
}

现在在这个控制器的视图中,我想为这些行中的每一行打开一个链接,website.com/page/history?fid=myuniquestring但是我卡住的地方是我如何准确地加载这个页面并让控制器获取字符串。然后进行数据库查询并在字符串存在时加载不同的视图,并检索该字符串。

所以像:

function history$somestring()
{
    if($somestring){
    //I will load a different view and pass $somestring into it
    } else {
    //here is code that gets all rows in database where uid = myid
    }
}

我不明白的是如何检测 $somestring 是否位于此控制器的 url 末尾,然后如果它存在则能够使用它。

非常感谢任何帮助/建议。

4

3 回答 3

0

例如,如果您的网址是:

http://base_url/controller/history/1

假设 1 是 id,然后按如下方式检索 id:

function history(){
    if( $this->uri->segment(3) ){ #if you get an id in the third segment of the url
        // load your page here
        $id = $this->uri->segment(3); #get the id from the url and load the page
    }else{
         //here is code that gets all rows in database where uid = myid and load the listing view
    }
}
于 2013-10-30T12:24:25.747 回答
0

您可以通过多种方式从您的 URI 段中期待这一点,我将给出一个非常通用的示例。下面,我们有一个控制器函数,它从给定的 URI、一个字符串和一个 ID 中获取两个可选参数:

public function history($string = NULL, $uid = NULL)
{
    $viewData = array('uid' => NULL, 'string' => NULL);
    $viewName = 'default';

    if ($string !== NULL) {
           $vieData['string'] = $string;
           $viewName = 'test_one';
    }

    if ($uid !== NULL) {
           $viewData['uid'] = $uid;
    }

    $this->load->view($viewName, $viewData);
}

实际的 URL 类似于:

example.com/history/somestring/123

然后,您在控制器和视图中都清楚地知道哪些设置(如果有的话)(也许您需要加载模型并在传递字符串时进行查询,等等。

如果这更有意义,您也可以在一个if / else if / else块中执行此操作,我无法从您的示例中完全说出您试图组合的内容。只是要小心处理没有传递的值,一个或两个值。

该函数的更有效版本是:

public function history($string = NULL, $uid = NULL)
{
    if ($string !== NULL):
         $viewName = 'test_one';
         // load a model? do a query?
    else:
         $viewName = 'default';
    endif;
    // Make sure to also deal with neither being set - this is just example code
    $this->load->view($viewName, array('string' => $string, 'uid' => $uid));
}

扩展版本只是在说明段如何工作方面做得更简单。您还可以使用CI URI 类segment()最常用的方法)直接检查给定的 URI。使用它来查看是否传递了给定的段,您不必在控制器方法中设置默认参数。

正如我所说,有很多解决方法:)

于 2013-10-30T12:42:08.217 回答
0

You should generate urls like website.com/page/history/myuniquestring and then declare controller action as:

function history($somestring)
{
    if($somestring){
       //I will load a different view and pass $somestring into it
    } else {
       //here is code that gets all rows in database where uid = myid
    }
}
于 2013-10-30T12:09:16.790 回答