通过控制器中的id从数据库动态加载页面

时间:2013-10-30 12:01:18

标签: codeigniter

我正在尝试根据数据库结果动态加载页面,但我不知道如何将其实现为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的末尾,然后如果它存在则能够使用它。

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

3 个答案:

答案 0 :(得分:0)

您应该生成website.com/page/history/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
    }
}

答案 1 :(得分: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
    }
}

答案 2 :(得分:-1)

有很多方法可以从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);
}

实际网址如下:

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 Class直接检查给定的URI(segment()是最常用的方法)。使用它来查看是否传递了给定的段,您不必在控制器方法中设置默认参数。

正如我所说,有很多方法可以解决这个问题:)