1

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

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

我希望我的网址看起来像

http://localhost/abc/book/123456

我认为借助 URI 库和 URI 段可以轻松完成,但我必须严格使用GET METHOD。请提出解决方案,以便使用 GET 方法获得上面的 URL。

下面是我的控制器的 book 方法:

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');
        }
    }
}
4

2 回答 2

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 参数,这当然行不通。

于 2013-05-16T12:54:55.697 回答
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 用户指南中所述:

如果您的 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;
    }
}
?> 
于 2013-05-16T11:45:06.497 回答