我刚开始学习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');
}
}
}
答案 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');
}
}
}
如果您的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;
}
}
?>