Codeigniter:我如何创建数据库驱动的URI?

时间:2012-03-27 08:27:05

标签: mysql codeigniter codeigniter-2 codeigniter-routing

我的路线是语言驱动的,看起来像 mydomain.com/en

$route['default_controller'] = "home";
$route['404_override'] = '';
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];  

但我有数据库内容,我希望在语言 mydomain.com/jp/the-slug-of-a-japanese-page

后的URI中

我有一个名为 posts 的表,它包含一系列内容,其中包含标题,slu and和语言,但我还没有完全了解如何编辑我的家庭控制器以检查URI是否来来自数据库。

这是我的家庭控制器方法。

class Home extends CI_Controller {

  function __construct()
  {
    parent::__construct();
  }
     public function index($title = '') {
       if(strlen($url)) {
        /* get content by title from DB */
        $data['url'] = $url;
        $this->load->view('user_home', $data);
       }
     } 
 }

2 个答案:

答案 0 :(得分:0)

你可以在控制器

中这样写
public function index($title = '') {

      if(strlen($url)) {
        /* get content by title from DB */
        /* load content view */
       }
   /* load index view */

}

路线

$route['default_controller'] = "home";
$route['404_override'] = '';
$route['(\w{2})/(:any)'] = $route['default_controller'].'/index/$2';
$route['(\w{2})'] = $route['default_controller'];

答案 1 :(得分:0)

不确定我是否完全理解您的问题,但我认为您想在数据库中搜索uri,这很简单:

function index()
{
    $needle = $this->uri->segment(2);
    $this->db->where('slug', $needle);
    $this->db->from('table_name');
    if($this->db->count_all_results() > 0)
    { //here the uri exists in your database }
    else
    { //here don't }
}

¿这可能是你需要的吗?

(当然代码应该在模型中,而不是在控制器中,以保持codeigniter的MVC)