在codeigniter中使用get变量时更改uri

时间:2013-05-16 11:41:38

标签: php codeigniter web-applications

我刚开始学习Codeignitor。我正在开发一个Web应用程序,我在其中使用get变量,并从数据库加载数据并显示它。 所以我的网址看起来像:

http://localhost/abc/book/?isbn=123456

我希望我的网址看起来像

http://localhost/abc/book/123456

我认为可以通过URI库和URI段轻松完成,但我必须严格使用 GET METHOD 。请建议解决方案,以便使用GET方法获取上面的URL。

以下是我的控制器的书籍方法:

public function book()
{
    $slug = $this->input->get('isbn',TRUE);
    if($slug == FALSE)
    {
        $this->load->view('books/error2');
    }
    else
    {
        $data['book'] = $this->books_model->get_book($slug);

        if (empty($data['book'])) 
        {
            $data['isbn'] = $slug;
            $this->load->view('books/error',$data);
        }
        else
        {
        $data['title'] = $data['book']['title'];
        $this->load->view('templates/header',$data);
        $this->load->view('books/view',$data);
        $this->load->view('templates/footer');
        }
    }
}

2 个答案:

答案 0 :(得分:2)

如果您的唯一目的是不必更改html表单,为什么我们不写一个小包装?

你只需要适当的路线来解决这个小问题。

class book extends MY_Controller{

    public function __construct()
    {

        parent::__construct();
        // If the isbn GET Parameter is passed to the Request 
        if($this->input->get('isbn'))
        {
            // Load the URL helper in order to make the 
            // redirect function available
            $this->load->helper('url');

            // We redirect to our slugify method (see the route) with the 
            // value of the GET Parameter
            redirect('book/' . $this->input->get('isbn'));
        }

    }

    public function slugify($isbn)
    {
        echo "Put your stuff here but from now on work with segments";
    }

}

现在路线

$route['book/(:any)'] = "book/slugify/$1";

每当你http://example.com/book/?isb=4783

它将路由到http://example.com/book/4783

GET参数传递给我们的slugify方法,然后您可以使用URI段。不需要触摸HTML表单。

但是,如果您坚持在脚本中处理GET参数,那么这当然不起作用。

答案 1 :(得分:0)

也许我遗漏了一些东西,但你可以使用get方法使用URI段将参数传递给你的函数:

public function book($slug)
{
    if($slug == FALSE)
    {
        $this->load->view('books/error2');
    }
    else
    {
        $data['book'] = $this->books_model->get_book($slug);

        if (empty($data['book'])) 
        {
            $data['isbn'] = $slug;
            $this->load->view('books/error',$data);
        }
        else
        {
        $data['title'] = $data['book']['title'];
        $this->load->view('templates/header',$data);
        $this->load->view('books/view',$data);
        $this->load->view('templates/footer');
        }
    }
}

正如CodeIgniter User Guide所述:

如果您的URI包含两个以上的段,它们将作为参数传递给您的函数。

例如,假设你有一个像这样的URI:

example.com/index.php/products/shoes/sandals/123

您的函数将传递URI段3和4(“凉鞋”和“123”):

<?php
class Products extends CI_Controller {

    public function shoes($sandals, $id)
    {
        echo $sandals;
        echo $id;
    }
}
?>